Безопасное хранение учетных данных между посещениями сайта - PullRequest
3 голосов
/ 03 марта 2009

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

Каким «рекомендациям» следует следовать, чтобы безопасно помнить учетные данные пользователей между посещениями моего сайта?

Ответы [ 4 ]

3 голосов
/ 11 марта 2009

Никогда не делай этого. Разбрасывать пароли под открытым небом.

Самый безопасный метод:

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

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

Edit:

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

Вы не просто используете значение автоинкремента для идентификатора сеанса. Вы делаете это с помощью сложной контрольной суммы, которую трудно повторить. Например, объедините имя пользователя, временную метку, соль, другую случайную соль и сделайте из нее контрольную сумму md5 или sha.

Для реализации функции, включающей учетные данные пользователя на веб-сайте / в службе, чаще всего происходит обмен данными, связанными с учетными данными, между клиентом и сервером. Это предоставляет данные человеку в середине атаки и т. Д. Кроме того, файлы cookie хранятся на жестком диске пользователя. Ни один метод не может быть на 100% безопасным.

Если вам нужна дополнительная безопасность, вы можете настроить свой сайт на https. Это предотвратит кражу файлов cookie и паролей с использованием атак «человек в середине».

Примечание:

Вовлечение IP-адресов в соединение не очень хорошая идея. Чаще всего несколько клиентов приходят с одного IP-адреса через NAT и т. Д.

2 голосов
/ 03 марта 2009

Вам не нужно хранить пароль, просто идентификатор пользователя, который ваше приложение может интерпретировать как имое.

Вещи, о которых вам нужно знать:

  • Если файл cookie скопирован, сможет ли другой пользователь выдать себя за этого пользователя
  • Пользователь не должен иметь возможность создать cookie, который бы аутентифицировал их как другого пользователя

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

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

1 голос
/ 11 марта 2009

Пароли в любой форме не должны храниться в файлах cookie. Печенье можно легко украсть.

Некоторые браузеры уже поддерживают сохранение паролей. Почему бы не позволить пользователю использовать это вместо этого?

0 голосов
/ 03 марта 2009

Хранение хэша имени пользователя в куки может обеспечить эту функцию "запомнить меня".

Однако для чувствительных областей системы вам необходимо знать, что пользователь вошел в систему с кэшированными учетными данными, чтобы вы могли предложить запрос имени пользователя / пароля, прежде чем позволить им нанести реальный ущерб. Это может быть использовано как флаг на основе сеанса.

...