@Lu_den

Зачем хешировать строку для cookies при авторизации?

Читаю habrahabr.ru/post/13726 (инструкция по созданию системы авторизации).
При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в строку user_hash. В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.

Не могу понять, в чем смысл хешировать строку, которая пойдет в cookies. Это ведь не пароль, который пользователь вводит в открытом виде и который требуется сравнить с хранящимся в базе хешем. Тут хеш сравнивается с хешем:
// Скрипт проверки
# Соединямся с БД
mysql_connect("localhost", "myhost", "myhost");
mysql_select_db("testtable");
if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{   
    $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    $userdata = mysql_fetch_assoc($query);
    if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
 or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))
    {
        setcookie("id", "", time() - 3600*24*30*12, "/");
        setcookie("hash", "", time() - 3600*24*30*12, "/");
        print "Хм, что-то не получилось";
    }
    else
    {
        print "Привет, ".$userdata['user_login'].". Всё работает!";
    }
}
  • Вопрос задан
  • 3803 просмотра
Пригласить эксперта
Ответы на вопрос 3
mcdb
@mcdb
То ли программист, то ли видение...
Абсолютно бессмысленная трата ресурсов. Её даже в куки класть не нужно. Храните в куке только идентификатор пользователя. Если он там есть - значит пользователь зашел на сайт и всё хорошо.
Ведь никто не подберёт постоянный идентификатор пользователя, это ж не какой-то там ненужный бессмысленный хэш генерируемый при каждом логине.
Ответ написан
He11ion
@He11ion
PHP-monkey
Статья 2007 года, на дворе 2015 - лучше не читайте такое.

А написано, наверное, "для секьюрности".
Ответ написан
Комментировать
vasilevkirill
@vasilevkirill
Сертифицированный тренер MikroTik TR0417
Если при авторизации хеш в базе существует, то можете в куку записать данный хеш.
В каждом скрипте где необходимо проверять достоверность авторизации вы сверяете то что в куке и в базе, если количество запросов много, то можете через сессии задать время проверки(раз в 5 минут).
при таком подходе у вас будет следующий функционал.
вы мажете скинуть авторизацию пользователя, просто сменив хеш в базе.
В куках вы не храните реальной информации а пароле.
также при таком подходе вы можете сделать авторизации только на одном клиенте!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы