Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация, безопасность работы с Cookie
 
 автор: tima2010   (17.10.2012 в 08:47)   письмо автору
 
 

Добрый день!

Пишу небольшой скрипт авторизации.
Посетитель вводит логин и пароль. Происходит поиск по базе на существование логина и пароля.

Если пользователь существует и пароль подходит, то создаем Хэш и записываем его в базу к авторизированному пользователю. К примеру:

$user_hash = md5(time().$login);


Этот Хэш так же записываем в COOKIE посетителя.

Когда посетитель зайдет на следующий день, мы делаем проверку на существование Хэша из его COOKIE в базе данных, если таковой имеется то авторизируем его:


<?php
function my_md5_check($str='') {
    if (
mb_strlen($str) != '32' || !preg_match ("/^[a-z0-9]+$/"$str)) {
        return 
false;
    } else {
        return 
true;
    }
}


if (isset(
$_COOKIE['user_hash']) && !isset($_SESSION['user_id'])) {

        if(
my_md5_check($_COOKIE['user_hash'])) {
            
$result mysql_query("SELECT `user_id` FROM `users` WHERE `user_hash` = '".$_COOKIE['user_hash']."' LIMIT 1");
            if(
mysql_num_rows($result) > 0){
                
$row mysql_fetch_assoc($result);
                
$_SESSION['user_id'] = $row['user_id'];
            } else {
                
$_SESSION['user_id'] = '0';
                
setcookie('user_hash''');
            }
        }
        
}
?>


Вопрос:

Что если у посетителя смогут "угнать" этот хэш и злоумышленник подставит его к себе... Как мне кажется безопасность в такой авторизации отсутствует.

Если привязывать к Хэшу IP адрес то смысл использования COOKIE потеряется, т.к. IP у посетителей динамический.

Хотел бы спросить у Вас совета, что порекомендуете?

  Ответить  
 
 автор: cheops   (17.10.2012 в 15:03)   письмо автору
 
   для: tima2010   (17.10.2012 в 08:47)
 

>Что если у посетителя смогут "угнать" этот хэш и злоумышленник подставит его к себе...
Для этого у вас на сайте должна быть XSS-инъекция, злоумышленик должен подготовить эксполит, а посетитель должен пройти по ссылке, чтобы его Cookie были похищены. Если вы не допускаете XSS-инъекций, можно смело хранить хэш в cookie.

  Ответить  
 
 автор: tima2010   (17.10.2012 в 15:45)   письмо автору
 
   для: cheops   (17.10.2012 в 15:03)
 

cheops, спасибо за ответ. Получается два варианта угона хэша:
1. Активный XSS когда внутри моего сайта можно прописать вредоносный код (фрейм, ява-код, изображение)
2. Пассивный XSS когда посетитель сам по своей глупости переходит на страницу где размещено вредоносный код.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования