Хранение регистрационной информации в файлах cookie


Я хочу сохранить аутентификационную информацию пользователя в файле cookie браузера для постоянного входа в систему. Как говорится, хранить какую-либо секретную информацию (например, пароль) в файлах cookie небезопасно, но для того, чтобы иметь такую опцию, как "Запомнить пароль", я думаю, что другого выбора нет.

Итак, если пользователь хочет запомнить свою регистрационную информацию, и если я сохраняю имя пользователя (адрес электронной почты) + Не пароль, а некоторую другую уникальную информацию, такую как ХЭШИРОВАННЫЙ идентификатор базы данных в файле cookie. Затем я должен проверить, является ли хэшированный идентификатор сохраненный в файле cookie совпадает с электронной почтой пользователя, которая хранится в файле Cookie. Как я думаю, любой может очень легко увидеть файлы cookie, хранящиеся в браузере (например, в Firefox, Параметры -> Файлы cookie).

Так будет ли это так же слабо, как если бы кто-то прочитал файл cookie с компьютера, на котором он сохранен, а затем на другом компьютере установил файл cookie с этой информацией, и он вошел бы в систему? (Как скрипт проверит сохраненную электронную почту и хэшированный идентификатор с базой данных, и он будет совпадать)?

Может ли этот подход быть немного улучшено без сохранения другой информации в базе данных (например, идентификатор сеанса и т.д.)? Спасибо

Author: Roman, 2011-06-14

7 answers

Есть и другой вариант.

Для каждого пользователя, после входа в систему и запроса на запоминание, создайте длинную случайную строку.

Сохраните эту строку вместе с идентификатором пользователя в файле cookie, который вы предоставляете пользователю.
Храните правильно обработанный хэш строки в своей базе данных.

Если пользователь предоставляет файл cookie "запомни меня", сопоставьте случайную строку с хэшированным верификатором, который у вас есть в базе данных (так же, как если бы это был пароль).

Если он совпадает -> войдите в систему пользователя и создайте для них новый файл cookie "запомни меня".
Если не совпадает -> запросить имя пользователя и пароль.

 11
Author: Jacco, 2011-06-14 11:31:07

Я написал ответ на тот же вопрос в Как улучшить мою схему входа пользователя - посмотрите там.

 1
Author: cweiske, 2017-05-23 10:30:54

Я бы предложил использовать уникальный ключ на сервере для шифрования имени пользователя (в данном случае электронной почты) и сохранения его в файле cookie аутентификации. Если файл cookie будет изменен, он не будет удален и приведет к сбою входа в систему.

Если файл cookie аутентификации скопирован (путем ручной настройки файла cookie или с помощью XSS) на другой компьютер (или другой браузер), то пользователь также войдет в систему на новом компьютере. Вы могли бы рассмотреть возможность добавления некоторой уникальной информации о компьютере (например, IP адрес) для снижения такого риска.

Это объяснение файлов cookie аутентификации в .NET, но я думаю, что эта концепция работает и на php: http://support.microsoft.com/kb/910443

 0
Author: Jim, 2011-06-14 08:03:08

У вас не так много выбора, когда дело доходит до хранения информации о пользователе на стороне клиента...

Вы можете попробовать выполнить некоторое шифрование, используя IP-адрес клиента в качестве ключа. Таким образом, даже если файл cookie скопирован на компьютер хакера, и если он не заметит, что IP-адрес является ключом шифрования, у вас будет некоторая защита информации пользователя.

Facebook делает что-то таким образом, доказательством является то, что каждый раз, когда вы пытаетесь войти в систему с другой точки подключения, вам нужно пройти через система проверки пользователей...

Так что ищите какое-нибудь обратимое шифрование, и это должно сделать ваш день лучше;)

 0
Author: MaxouMask, 2011-06-14 08:04:54

Есть хорошая статья о том, как сделать файлы cookie "запомни меня" более безопасными: http://jaspan.com/improved%5Fpersistent%5Flogin%5Fcookie%5Fbest%5Fpractice

Я реализовал метод, описанный в статье, в библиотеке PHP: https://github.com/gbirke/rememberme , может быть, вы можете использовать это в качестве ссылки.

Фиксация сеанса и кража файлов cookie - реальная проблема в эпоху Firesheep. Единственная защита от этого - защита вашего сайта с SSL и мониторингом недостатков XSS.

Еще один способ повысить вашу безопасность - запомнить, вошел ли пользователь в систему с помощью файла cookie "запомнить меня", и заставить его повторно пройти аутентификацию, когда он делает что-то "опасное", например, заказывает или изменяет учетные данные для входа.

Дополнительные ресурсы см. В этом вопросе: Окончательное руководство по аутентификации веб-сайта на основе форм

 0
Author: chiborg, 2017-05-23 12:26:29

Вы также можете установить файл cookie с идентификатором пользователя и идентификатором сеанса с отметкой времени истечения срока действия. Затем, если вы свяжете файл cookie с IP или именем хоста (или предпочтительно с обоими), вы будете в полной безопасности от похитителей файлов cookie и других вещей.

 0
Author: Sander, 2011-06-14 08:16:02

Я думаю, что другого выбора нет

Подумайте еще раз.

Вам не нужно хранить пароль на стороне клиента, чтобы поддерживать сеанс. Операция "запомнить меня" точно такая же - используйте случайное значение, которое является ключом поиска для данных, хранящихся на вашем сервере.

За исключением использования сертификатов на стороне клиента с парольными фразами, все остальное, что вы делаете, чтобы усложнить ситуацию, не улучшит безопасность и, скорее всего, откроет личные данные вашего клиента.

 0
Author: symcbean, 2011-06-14 08:19:40