@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'].". Всё работает!";
    }
}
  • Вопрос задан
  • 3814 просмотров
Пригласить эксперта
Ответы на вопрос 3
mcdb
@mcdb
То ли программист, то ли видение...
Абсолютно бессмысленная трата ресурсов. Её даже в куки класть не нужно. Храните в куке только идентификатор пользователя. Если он там есть - значит пользователь зашел на сайт и всё хорошо.
Ведь никто не подберёт постоянный идентификатор пользователя, это ж не какой-то там ненужный бессмысленный хэш генерируемый при каждом логине.
Ответ написан
He11ion
@He11ion
PHP-monkey
Статья 2007 года, на дворе 2015 - лучше не читайте такое.

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект