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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Цитата:

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

EDIT:

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

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

p.s. Куки файлы должны содержать (случайные) токены, а не хэши паролей (см. хэши или маркеры для "запомнить меня" и "куки файлы" ).

Ответ 6

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

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

Ответ 7

Мой подход следующий:

  • Hash user_id
  • Создайте уникальный ключ для пользователя - md5(current_timestamp)
  • Сохранить ключ в БД
  • Кодировать все так, чтобы он выглядел как BS - base64
  • Сохраните его в файле cookie

До сих пор он отлично работал у меня:)