Каковы принятые методы для того, чтобы оставаться на веб-сайте? - PullRequest
5 голосов
/ 17 июля 2009

Большинство веб-сайтов, в которые вы можете войти, также предоставляют функцию, которая запоминает вас между сеансами. Каковы принятые и безопасные методы для реализации этого? (Что вы помещаете в куки и как вы их обрабатываете на сервере / db?)

Ответы [ 5 ]

5 голосов
/ 17 июля 2009

В этом недавнем 2009 разделе в Spring Security 3.0 обсуждается аутентификация типа Remember-Me. Общие понятия не являются специфическими для Spring Security, поэтому вы сможете извлечь из этого выгоду, даже если вы его не используете. В этой главе также упоминается публикация Барри Джаспана в 2006 блоге , которая является улучшением по сравнению с методами, описанными в публикации Чарльза Миллера в 2004 блоге .

Запись в блоге сводится к:

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

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

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

    • Если триплет присутствует, пользователь считается аутентифицированным. Использованный токен удаляется из базы данных. Создается новый токен, который сохраняется в базе данных с именем пользователя и идентичным идентификатором серии, и новый файл cookie для входа в систему, содержащий все три, выдается пользователю.
    • Если имя пользователя и серия присутствуют, но токен не совпадает, предполагается кража. Пользователь получает строго сформулированное предупреждение, и все запомненные сеансы пользователя удаляются.
    • Если имя пользователя и серия отсутствуют, файл cookie для входа игнорируется.
2 голосов
/ 17 июля 2009

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

Вы по-прежнему рискуете кражи cookie, но вы всегда можете подписать cookie, используя IP-адрес, User-agent и другие вещи, чтобы минимизировать угрозу.

0 голосов
/ 17 июля 2009

Не пытайтесь внедрить сеансовые куки-файлы самостоятельно.

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

Простой API в псевдокоде в веб-фреймворке может выглядеть примерно так при входе в систему:

authFrwk.loginUser(request.POST.get(username), request.POST.get(password));

Это вернет cookie клиенту (обрабатывается исключительно платформой).

Надежно авторизованная операция будет выглядеть примерно так:

if (authFrwk.isLoggedOn()) // implicitly checks user session cookie
    doSomethingImportant();
else
    return notLoggedInMsg();

По сути, куки-файлу сеанса присваивается уникальный идентификатор на стороне сервера, который злой пользователь не может сгенерировать / угадать сам, и который идентифицирует клиента как вошедшего в систему пользователя.

0 голосов
/ 17 июля 2009

Cookies, но пользователь может решить удалить его.

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

Я не вижу других решений.

0 голосов
/ 17 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...