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

Система входа в PHP с использованием Cookies и соленых хешей

Я разрабатываю систему входа на основе PHP. Каждый пользователь имеет идентификатор (номер) и пароль, который хранится как соленый хеш.

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

В прошлом я играл с переменными $_SESSION. Однако они, кажется, удаляются, когда пользователь покидает браузер, что нежелательно. Кроме того, я не могу "предположить", что пользователь не попытается обмануть систему, поэтому она должна быть безопасной.

Итак, вот мои вопросы:

  • Должен ли я использовать $_SESSION или $_COOKIE? Каковы основные преимущества каждого из этих подходов?
  • Как установить флажок "Запомнить меня"?
  • Какая информация должна храниться в переменной session/cookie?

Обратите внимание, что в этом конкретном вопросе не рассматриваются проблемы безопасности базы данных.

Что касается номера 3, я имею в виду:

  • Должен ли я хранить идентификатор и хешированный пароль пользователя в файле cookie/сеансе или
  • Должен ли я хранить идентификатор и недопустимый пароль пользователя в файле cookie/сеансе или
  • Должен ли я хранить "SessionID" и пароль (хэшированные или не хешированные?) или
  • Должен ли я хранить "SessionID", "ID" и пароль (еще раз, хэшированные или не хэшированные)?

Я хочу, чтобы мой сайт был максимально безопасным, но эффективным и удобным для пользователя. Если используется подход на основе SessionID, я также хотел бы получить некоторое объяснение относительно его хранения в базе данных.

Заранее благодарю

РЕДАКТИРОВАТЬ: ответы Эрана и Брайана, как представляется, являются тем, что мне нужно. К сожалению, я могу отметить только один из них, как принято. Я попытаюсь выполнить и реализовать, чтобы узнать, какой из них более полезен.

4b9b3361

Ответ 1

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

В общем, я реализовал функцию запоминания в веб-приложениях с помощью Cookies. Хорошим местом для начала создания "надежной" постоянной системы входа является сообщение в блоге на аквариуме. Подробный ответ уже рассмотрен в другом ответе на переполнение стека.

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

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

Ответ 2

Для получения конфиденциальной информации (т.е. результатов проверки подлинности) используются только сеансы. Сеансы хранятся на стороне сервера и гораздо менее подвержены риску.

Что касается времени жизни сеанса, то по умолчанию это время жизни сеанса браузера, но вы можете это контролировать. Есть несколько настроек, которые влияют на это:

session.gc_maxlifetime - эффективно контролирует время жизни сеанса.

session.gc_probability и session.gc_divisor вместе определяют, как часто будет выполняться сборка мусора сеанса.

И last - session.cookie_lifetime контролирует время жизни файла cookie сеанса (куки файл, в котором хранится идентификатор сеанса, поэтому он не должен транслироваться по URL-адресу). Он должен соответствовать значению session.gc_maxlifetime.

Кроме того, никогда не храните пароли в сеансах или куки (даже в хэшированном формате). Просто результаты проверки подлинности.

Ответ 3

Сохраните идентификатор в $_SESSION, но не храните хешированный или не хешированный пароль. После входа пользователя в систему, и идентификатор сохраняется в $_SESSION, вам больше не нужен пароль.