PHP Cookie, чтобы пользователь вошел в систему – достаточно ли это достаточно безопасно?

У меня есть пользовательская база данных, в которой хранятся зашифрованные пароли и вы хотите создать файл cookie «Keep me logged in». Я считаю, что следующий метод должен быть достаточно безопасным для моих целей, но я хотел бы услышать ваши мысли:

  1. Если пользователь выбирает «Keep me logged in box» и предоставляет правильные учетные данные, создайте файл cookie, содержащий очень большую случайную строку (назовите это маяком ). Это также сохраняется в отдельном столбце таблицы пользователя.
  2. Каждый раз, когда пользователь посещает страницу, выполните поиск в таблице пользователя для файла cookie маяка . Если этого не существует, ничего не делайте. Если это действительно существует, извлеките информацию пользователя и обработайте их, как вошедшие в систему.
  3. Когда пользователь выйдет из системы или войдет в систему без установленного флажка, уничтожьте файл cookie маяка .

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

Related of "PHP Cookie, чтобы пользователь вошел в систему – достаточно ли это достаточно безопасно?"

Я предполагаю, что это делается в дополнение к обычной обработке сеанса как способ воссоздания сеанса позже.

Есть несколько вещей, которые можно сделать для повышения безопасности.

  1. Использовать SSL, затрудняет перехват файлов cookie.
  2. Восстановите хеш-файл cookie после каждого использования. Он должен быть действителен только для одного входа.
  3. Если вы сохраните это как 1 cookie для 1 пользователя, это не сработает, если пользователь находится на нескольких устройствах (Cookie с первого устройства будет переопределено cookie на втором устройстве).
  4. Хэш должен быть случайным, не должен включать какие-либо пользовательские данные в поколение.
  5. Данные пользователя (в частности, адрес электронной почты, пароль) требуют изменения пароля. Если печенье перехвачено, перехватчик не сможет изменять данные в учетной записи.

Похоже, вы пытаетесь воссоздать сеансы с нуля. Почему бы просто не пройти session_set_cookie_params () действительно длинный тайм-аут?

Я думаю, что это не лучший способ реализовать cookie «помни меня». Сделать хэш больше не решение.

Подумайте о том, чтобы сохранить что-то еще в своем cookie.

Вы предлагаете следующее:

'a89bd752123cde09' 

Если у вас много пользователей, возможно, это не так сложно, как вы думаете, чтобы получить действительный токен

Если вы просто добавляете идентификатор пользователя в этот хэш …

 $userID . '-' . 'a89bd752123cde09 

Теперь им нужно получить действительный токен, связанный с правильным идентификатором пользователя, мы сделали его немного сложнее

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

 hash_hmac('sha256', $userID . '-' . 'a89bd752123cde09' . '-' . md5(timeStamp when remember expires) . '-' . md5(browser user agent), A_SECRET_KEY); 

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

Это не лучшее решение, но я думаю, что это лучше. Существует много информации о безопасности в Интернете, читайте об этом и не выполняйте это непосредственно.