Запомнить меня?

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

Те же данные cookie хранятся в БД при создании файлов cookie, и когда пользователи имеют cookie, они сравниваются (данные cookie, данные БД).

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

Злоумышленник, который ворует cookie, имеет тот же файл cookie, что и исходный пользователь: |

Забыл какой-то шаг? :П

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

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

Позаботьтесь, чтобы токены не были легко угаданы (т.е. они должны состоять из абсолютно случайных данных, например, из CRNG).

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

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

Вы никогда НИКОГДА не храните пароль пользователя в cookie, даже если он hashируется!

Взгляните на это сообщение в блоге:

  • Улучшенная персистентная рецепция печенья для входа в систему (ноябрь 2006 г. by bjaspan) ( orignal )

Цитата:

  1. Когда пользователь успешно войдет в систему с помощью параметра «Запомнить меня», в дополнение к стандартным файлам cookie управления выпуском создается файл cookie для входа. [2]
  2. Файл cookie для входа содержит имя пользователя пользователя, идентификатор серии и токен. Серия и токен – это неопровержимые случайные числа из достаточно большого пространства. Все три сохраняются вместе в таблице базы данных.
  3. Когда пользователь, не зарегистрированный пользователем, посещает сайт и представляет файл cookie для входа, имя пользователя, серия и токен просматриваются в базе данных.
  4. Если триплет присутствует, пользователь считается аутентифицированным. Используемый токен удаляется из базы данных. Создается новый токен, который хранится в базе данных с именем пользователя и идентификатором той же серии, и новый пользовательский файл cookie, содержащий все три, выдается пользователю.
  5. Если имя пользователя и серия присутствуют, но токен не совпадает, предполагается кража. Пользователь получает строго сформулированное предупреждение, и все пользовательские сеансы пользователя удаляются.
  6. Если имя пользователя и серия отсутствуют, файл cookie для входа игнорируется.

Я бы даже не сохранил имя пользователя в cookie, просто случайный токен, сгенерированный с почти невозможной техникой взлома, и сопоставлял его с пользователем в вашей базе данных и никогда не хранил пароль пользователя, даже hashированный в cookie, он будет открыт для Атака грубой силы . Да, если кто-то украдет токен, он может получить доступ к учетной записи пользователя, но пароль не будет скомпрометирован, а токен будет аннулирован, как только реальный пользователь выйдет из системы. Также помните, что вы не должны разрешать такие важные задачи, как смена пароля для пользователя, у которого только есть действительный токен, вам нужно снова запросить пароль для таких задач.

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

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

РЕДАКТИРОВАТЬ:

Вот несколько вещей, которые вы можете сделать, чтобы защитить своих пользователей от атак, связанных с кражей cookie:

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

ps Cookies должны содержать (случайные) токены, а не hashи паролей (см. hashи или жетоны для «помнить меня» cookie? ).

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

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

Мой подход заключается в следующем:

  1. Хеш user_id
  2. Создайте уникальный ключ для пользователя – md5(current_timestamp)
  3. Сохранить ключ в БД
  4. Кодируйте все так, чтобы он выглядел как BS – base64
  5. Сохраните его в файле cookie

До сих пор он отлично работал для меня 🙂

  • Безопасно ли хранить пароли в качестве переменных среды (а не как обычный текст) в файлах конфигурации?
  • Как правильно выйти из веб-приложения Java EE 6 после входа в систему
  • Как создать самозаверяющий сертификат для подписи кода в Windows?
  • Использование SymDony2 AccessDeniedHandlerInterface
  • Каков наилучший способ предотвратить захват сеанса?
  • Как работает SQL-инъекция из комикса XBCD Bobby Tables?
  • Лучшие практики: Солить и переполнять пароли?
  • Аутентификация против авторизации
  • Xcode 4 - ошибка «Недействительность подлинного подписи не найдена» при настройке профилей при установке нового Macintosh
  • Отключено появление и появление предупреждений Java на приложениях Java Web Start
  • Как хранить и извлекать учетные данные из диспетчера учетных данных Windows Vault?
  • Давайте будем гением компьютера.