Подтвердить что ты не робот

Каков наилучший способ реализовать "запомнить меня" для веб-сайта?

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

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

4b9b3361

Ответ 1

Улучшенная персистентная версия cookie для входа в систему

Вы можете использовать эту стратегию, описанную здесь как наилучшую практику (2006) или обновленная стратегия, описанная здесь (2015):

  • Когда пользователь успешно войдет в систему с помощью параметра "Запомнить меня", в дополнение к стандартным файлам cookie управления сеансом выдается
cookie для входа в систему. Файл cookie для входа содержит идентификатор серии и токен . Серия и токен представляют собой неопознанные случайные числа из достаточно большого пространства. Оба сохраняются вместе в таблице базы данных, токен хэшируется (sha256 в порядке). Когда пользователь, не зарегистрированный пользователем, посещает сайт и представляет файл cookie для входа, идентификатор серии просматривается в базе данных.
  • Если присутствует идентификатор серии, а хэш токена соответствует хешу для этого идентификатора серии, пользователь считается аутентифицированным. Создается новый токен, новый хэш для токена хранится поверх старой записи, и пользователю выдается новый файл cookie для входа (он может повторно использовать идентификатор серии ).
  • Если серия присутствует, но токен не соответствует, предполагается кража. Пользователь получает строго сформулированное предупреждение, и все сохраненные пользователем сеансы удаляются.
  • Если имя пользователя и серия отсутствуют, файл cookie для входа игнорируется.

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

Ответ 2

Я бы сохранил идентификатор пользователя и токен. Когда пользователь вернется на сайт, сравните эти две части информации с чем-то постоянным, как запись в базе данных.

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

Ответ 3

Сохраните свой UserId и RememberMeToken. Когда они заходят в систему с помнить, что я проверил, создайте новый RememberMeToken (который недействителен для любых других отмеченных машин, которые меня помнят).

Когда они возвращаются, просмотрите их, запомните мне токен и убедитесь, что UserId соответствует.

Ответ 4

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

Причина, конечно, в том, что ваши файлы cookie, содержащие ваш постоянный сеанс, так легко украдены.

4 способа украсть ваши файлы cookie (от комментарий Jens Roland на странице @splattne основывается на его ответе):

  • Перехватывая его по незащищенной строке (захват пакетов/сеанс захвата)
  • Прямой доступ к браузеру пользователя (через вредоносное ПО или физический доступ к ящику)
  • Прочитав его из базы данных сервера (возможно, SQL Injection, но может быть что угодно)
  • Сбой XSS (или подобный эксплойт на стороне клиента)