|
|
|
| Добрый день!
Пишу небольшой скрипт авторизации.
Посетитель вводит логин и пароль. Происходит поиск по базе на существование логина и пароля.
Если пользователь существует и пароль подходит, то создаем Хэш и записываем его в базу к авторизированному пользователю. К примеру:
$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 у посетителей динамический.
Хотел бы спросить у Вас совета, что порекомендуете? | |
|
|
|
|
|
|
|
для: tima2010
(17.10.2012 в 08:47)
| | >Что если у посетителя смогут "угнать" этот хэш и злоумышленник подставит его к себе...
Для этого у вас на сайте должна быть XSS-инъекция, злоумышленик должен подготовить эксполит, а посетитель должен пройти по ссылке, чтобы его Cookie были похищены. Если вы не допускаете XSS-инъекций, можно смело хранить хэш в cookie. | |
|
|
|
|
|
|
|
для: cheops
(17.10.2012 в 15:03)
| | cheops, спасибо за ответ. Получается два варианта угона хэша:
1. Активный XSS когда внутри моего сайта можно прописать вредоносный код (фрейм, ява-код, изображение)
2. Пассивный XSS когда посетитель сам по своей глупости переходит на страницу где размещено вредоносный код. | |
|
|
|