[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация
simba
Ребят, посмотрите, где недочеты в данном коде? Это скрипт авторизации, написанный мною

UPD:

PHP
$login = stripslashes($login);
    $password = stripslashes($password);
    $md5pwd = md5($password);
    $check_user = mysql_query("SELECT * FROM reg_customer WHERE email LIKE '$login' && password LIKE '$md5pwd' ",$db); 
    
    if
(mysql_num_rows($check_user)>0)
    {
         $user = true;
        $uid = mysql_fetch_row($check_user); $uid = $uid[0];
    }
    if($user)
    {
            $_SESSION['user'] = $uid;
            
            $query_adm 
= mysql_query ("SELECT * FROM administration WHERE id_usr = $uid",$db);
            if(mysql_num_rows($query_adm)>0)
            {
                            $_SESSION['admin'] = $uid;
            }
            
            
//Установка куки, если отмечен чекбокс "запомнить"
            if($remember)
            {
                $value = md5($uid);
                setcookie("user", $value);
                setcookie("user", $value, (time()+3600)*24*7);  /* 1 неделя */

            }
     }




Спустя 1 час, 20 минут, 44 секунды (8.02.2009 - 11:21) Sylex написал(а):
- stripslashes - использовать или нет, зависит от настроек magic quotes (надо проверять)
- зачем получать все данные из БД, когда можно воспользоваться условием WHERE
- хэшировать ID пользователя - это слишком просто... я тогда ко всем юзерам твоим доступ получу smile.gif

в общем, тебе разъяснят:)

Спустя 41 минута, 3 секунды (8.02.2009 - 12:02) simba написал(а):
Цитата (Sylex @ 8.02.2009 - 08:21)
- зачем получать все данные из БД, когда можно воспользоваться условием WHERE


спасибо, поправил

Цитата (Sylex @ 8.02.2009 - 08:21)
- хэшировать ID пользователя - это слишком просто... я тогда ко всем юзерам твоим доступ получу smile.gif


а как было бы лучше?

Спустя 3 часа, 12 минут, 1 секунда (8.02.2009 - 15:14) Sylex написал(а):
simba
если в БД его писать - можно случайный
если так - то можно хэш логин+пароль+IP например

Спустя 4 дня, 5 часов, 32 минуты, 43 секунды (12.02.2009 - 20:47) Grazor написал(а):
simba
PHP
if(mysql_num_rows($check_user)>0)


ставим ===1 это понижает шанс SQL-инъекции.
Также против инъекций:
PHP
$login = htmlspecialchars($login);
$login = strip_tags($login);


Переменные $login и $password лучше брать из $_GET["login"]

и снова шанс для кулц-хакера:
PHP
$query_adm = mysql_query ("SELECT * FROM administration WHERE id_usr = $uid",$db);


$uid НАДО взять в кавычки: \"$uid\", что не позволит, например, воспринимать символы /* как комментарии

Спустя 25 минут, 26 секунд (12.02.2009 - 21:13) LoneCat написал(а):
Небольшой пример работы твоего скрипта:
PHP
$login 'hackeduser@email\' OR email LIKE \'non_exist@email\'';
$password 'да что угодно';

$login stripslashes($login);
$password stripslashes($password);
$md5pwd md5($password);
print(
"SELECT * FROM reg_customer WHERE email LIKE '$login' && password LIKE '$md5pwd' ");

А все потому что чтобы не допустить SQL-Injection - слеши нужно не удалять, а добавлять smile.gif иже
PHP
$login addslashes($login);

вместо
PHP
$login stripslashes($login);

уже более-менее решили-бы проблему, а вообще для каждой БД есть свои специфичные функции экранирования строк, для MySQL это mysql_real_escape_string(). Но не стоит забывать что есть еще директива magic_quotes_gpc, которая в зависимости от настроения настроек сама экранирует данные, получить булевое значение того были-ли уже экранированы данные или нет - можно через get_magic_quotes_gpc().
Насчет $uid в кавычках автор выше имхо неправ, эти данные получены из БД, им вполне можно доверять, кавычки конечно лишними не будут, но это не критично.

Спустя 6 дней, 17 часов, 14 минут, 22 секунды (19.02.2009 - 14:27) 4php написал(а):
PHP
$password stripslashes($password);
$md5pwd md5($password);

Зачем stripslashes($password), если md5($password) ?

Спустя 2 дня, 1 час, 22 минуты, 29 секунд (21.02.2009 - 15:49) welbox написал(а):
думаю, будет правильней сделать так:

PHP
if(isset($_POST['login'])) $login $_POST['login']; else $login '';
if(isset(
$_POST['password'])) $password md5(md5($_POST['password'])); else $password '';

$login htmlspecialchars(stripslashes($login));
$password htmlspecialchars(stripslashes($password));
            
if (
preg_match("/[\||\'|\<|\>|\"|\!|\?|@\$|\|\/|\\\|\&\~\*\+]/",$login))
{
    
$msg "<div class='reg_info'>Будьте внимательны при заполнении поля Логин!</div>"
    
header("Location: http://site.ru/info.php?msg=$msg");
}
            
if (
preg_match("/[\||\'|\<|\>|\"|\!|\?|\$|\|\/|\\\|\&\~\*\+]/",$password))
{
    
$msg "<div class='reg_info'>Будьте внимательны при заполнении поля E-mail!</div>"
    
header("Location: http://site.ru/info.php?msg=$msg");
}


так, хотя и просто, но защитно )))))))

Спустя 2 часа, 45 минут, 2 секунды (21.02.2009 - 18:34) Sylex написал(а):
welbox
низачот

Спустя 3 часа, 15 минут, 23 секунды (21.02.2009 - 21:50) twin написал(а):
Зло и противно с моей стороны, но всё таки, росмотрите пожалуйста сюда. Ну может быть я смогу что нибудь подсказать....

Спустя 3 дня, 22 часа, 57 минут, 35 секунд (25.02.2009 - 20:47) welbox написал(а):
Цитата (Sylex @ 21.02.2009 - 15:34)
welbox
низачот

в чем именно НЕЗАЧОТ?

Спустя 22 минуты, 19 секунд (25.02.2009 - 21:10) kirik написал(а):
welbox, ну во-первых при проверке юзернэйма проще проверить на допустимые символы (типа [0-9a-z_]) тогда эта строка $login = htmlspecialchars(stripslashes($login)); отпадает за ненадобностью.

Во-вторых эта строка $password = htmlspecialchars(stripslashes($password)); тоже не нужна, так как пароль будет загоняться в хэш. Следовательно и валидация пароля по символам (preg_match("/[\||\'|\<|\>|\"|\!|\?|\$|\|\/|\\\|\&\~\*\+]/",$password)) тоже не нужна.

В-третьих md5(md5($_POST['password'])) не поможет лучше защитить пароль. Почитай что дал twin.

В-четвертых: где проверка на НЕзаполненность логина и/или пароля?

В-пятых - передавать сообщение об ошибки через GET тем более вместе с HTMLом, как минимум не корректно, как максимум не безопасно.

Спустя 10 часов, 21 минута, 55 секунд (26.02.2009 - 07:32) Sylex написал(а):
kirik +

welbox
зачем htmlspecialchars вообще ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.