Как лучше всего реализовать функцию «запомнить меня» на веб-сайте?[закрыто]

StackOverflow https://stackoverflow.com/questions/244882

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Улучшенная практика использования файлов cookie для постоянного входа в систему

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

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

    Другие советы

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

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

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

    Когда они вернутся, найдите их по токену Запомнить меня и убедитесь, что идентификатор пользователя совпадает.

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

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

    4 способа украсть ваши файлы cookie (из комментарий Йенса Роланда на странице @splattne основывал свой ответ на):

    1. Путем перехвата по незащищенной линии (перехват пакетов/перехват сеанса)
    2. Путем прямого доступа к браузеру пользователя (через вредоносное ПО или физический доступ к ящику)
    3. Прочитав его из базы данных сервера (вероятно, SQL-инъекция, но может быть что угодно)
    4. С помощью взлома XSS (или аналогичного эксплойта на стороне клиента)
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top