|
|
|
| Посмотрите есть ли ошибки в коде, которые могут вызввать последствия...
Фаил S1.txt содержит шапку хтмл документа, а S2.txt - форму с логином и паролем (и конец хтмл документа)
<?
if (empty($_POST['Login']) || empty($_POST['pass']))
{
include "S1.txt";
ECHO ("Введите имя и пароль");
include "S2.txt";
exit;
}
$login=$_POST['Login'];
$login=substr ($login, 0, 10);
$login=htmlspecialchars($login);
$pass=$_POST['pass'];
$pass=substr ($pass, 0, 15);
$pass=htmlspecialchars($pass);
include "dbconfig.php";
$test=mysql_query("select 'pass' FROM 'users' WHERE name = '".$login."'");
$t=mysql_fetch_array($test);
If (!$t)
{
include "S1.txt";
print("<font color=red size=3>Введенное вами имя не существует</font>");
include "S2.txt";
exit;
}
elseif ($t['pass']==$pass)
{
session_start();
$_SESSION['authorized'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
header("Location: http://sarver.ru/bla-bla.php");
exit;
}
else
{
include "S1.txt";
echo ("Пароль неверен");
include "S2.txt";
}
?>
|
| |
|
|
|
|
|
|
|
для: FoMa
(14.06.2005 в 12:15)
| | В принципе, конечно, поля здорово урезаны при помощи функции substr, но я бы рисковать не стали и добавил бы строки
<?php
if (!get_magic_quotes_gpc())
{
$login = mysql_escape_string($login);
$pass = mysql_escape_string($pass);
}
?>
|
http://www.softtime.ru/info/articlephp.php?id_article=35 | |
|
|
|
|
|
|
|
для: cheops
(14.06.2005 в 18:51)
| | я читал что вообще магические кавычки следует отключать... а вместо них пользоваться не "mysql_escape_string" а более продвинутой ее формой -
mysql_real_escape_string
это так? | |
|
|
|
|
|
|
|
для: FoMa
(15.06.2005 в 13:37)
| | Эти функции различаются тем, что mysql_real_escape_string дополнительно к mysql_escape_string экранирует ещё и % и _, в принцие в плане безопасности это не смертельно, можно использовать как первый, так и второй вариант. Отключение магических кавычек лежит в ведении администрации хостинга, которая не спешит их отключать, так как многие разработчики не используют этих функций в своих скриптах. | |
|
|
|
|
автор: Саня (15.06.2005 в 14:34) |
|
|
для: FoMa
(14.06.2005 в 12:15)
| | По поводу пароля. Я бы сделал так:
<?
$pass=sha1(md5(crypt($_POST['pass'], $_POST['Login'])));
// Если не нужна особая секретность, можно так:
$pass=md5($_POST['pass']);
?>
|
И в базе хранил бы шифрованные пароли.
И не стоит ограничивать размер пароля (разве что до 40 символов). | |
|
|
|
|
|
|
|
для: Саня
(15.06.2005 в 14:34)
| | Еще вопрос про функцию "str_replace" можно ли сделать чтобы она за раз просматривала несколько символов? (може быть ее "аналог " - "preg_replace")
Или для удаления каждого знака каждый раз повторять конструкцию str_replace...? | |
|
|
|
|
|
|
|
для: FoMa
(15.06.2005 в 15:23)
| | Да и еще,я тут подумал ведь проверять пароль на вводимые вимволы не обязательно - достаточно его просто зашифровать тем же md5... | |
|
|
|
|
автор: Саня (15.06.2005 в 18:26) |
|
|
для: FoMa
(15.06.2005 в 15:23)
| |
<?
$text="Всякая ерунда, с, запятыми.";
$new=str_replace(",", "", $text);
echo ($new);
?>
|
Результат - "Всякая ерунда с запятыми." | |
|
|
|
|
|
|
|
для: Саня
(15.06.2005 в 18:26)
| | Еще вопрос по безопасности... я добавил в код еще строку $_SESSION['name_user']=$login;
которая как несложно догадаться указывает на имя пользователя... исходя из этого имени на других страницах идут все запросы к mySQL, вопрос:
может ли пользователь изменить этот параметр и если может как этого избежать?! Ведь если в кажетве $_SESSION['name_user'] он укажет чужое имя он (исходя из того как я ставлю запросы) получит все права не своего пользователя..
<?
elseif ($t['pass']==$pass)
{
session_start();
$_SESSION['avtoriz'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['name_user']=$login;
header("Location: http://.....php");
}
?>
|
| |
|
|
|
|
автор: Gush (18.06.2005 в 20:33) |
|
|
для: FoMa
(18.06.2005 в 15:20)
| | Я, в добаление к описанному выше, генерирую при входе временный пароль - случайный набор символов и пишу его в куки пользователю. В переменных сессии храню хэш этого временного пароля и хэш составной строки $_SERVER['REMOTE_ADDR']. $_SERVER['USER_AGENT'].session_id() .
Перехват переменных сессии в этом случае ничего не даст, т.к. кукис с временным паролем хранится на машине клиента и проверяется его хэш. | |
|
|
|