Какой самый безопасный способ входа на сайт?

1

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

Я попытался взглянуть на "Keep Me Logged In" - лучший подход, в котором наиболее ответный ответ сказал, что я должен создать токен, а затем сохранить этот токен в базе данных! Несомненно, это абсолютно небезопасно, потому что все, что требуется, - это перехват базы данных и редактирование файлов cookie, чтобы попасть в учетную запись elses?

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

  • 0
    самый безопасный способ - вообще не иметь веб-сайта или логина ... не могу взломать то, чего там нет ...
  • 0
    Принятый ответ по предоставленной вами ссылке имеет право.
Показать ещё 9 комментариев
Теги:
security
token
remember-me
login-control

2 ответа

4
Лучший ответ

Недавно мы опубликовали блог о безопасной аутентификации с долговременной настойчивостью (ака "Remember Me"), но наибольшая разница между этим сообщением в блоге и ответом ircmaxell на "Keep Me Logged In" - лучший подход - это разделение поиска ( который не является постоянным временем) и валидацией (которая является постоянным временем).

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

Вход в систему (простой и базовый)

  • Используйте bcrypt. В частности, password_verify(). Не создавайте свои соли.

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

  • Предельные неудачные попытки. Например: после 5 сбоев на IP или имя пользователя требуется CAPTCHA.

Долгосрочное сохранение ("Помни меня")

При входе в систему:

  1. Создайте безопасный случайный токен.
  2. Создайте безопасный случайный идентификатор.
  3. Сохраните идентификатор и токен в rememberme cookie memme.
  4. Храните хэш SHA256 маркера в базе данных.
  5. Когда пользователь попадает на страницу, если у них есть rememberme печенье, возьмите идентификатор и сделать поиск по базе данных.
  6. Если для этого идентификатора есть токен аутентификации, возьмите хэш SHA256.
  7. Сравните хэш-код токена, предоставленного файлом cookie с хешем SHA256 в базе данных, используя hash_equals().
  8. Если это удается, установите для этого идентификатора пользователя переменную сеанса. Создайте новый токен. Если это не удается, удалите запись из базы данных.

Преимущества этой стратегии

  • Если успешная атака SQL-инъекций приводит к утечке токенов, у всех злоумышленников есть хэш SHA256 различных токенов. Это не полезно для компрометации учетных записей.
  • Поиск базы данных не является постоянным. Вот почему идентификатор отделен от токена.
  • Последовательные идентификаторы утечки уровня активности вашего приложения, которые многие компании хотят сохранить конфиденциальными. Случайный идентификатор искажает эту деталь.

Недостатки

  • (Будущие авторы StackOverflow не должны заполнять этот список, если они обнаружены.)
  • 0
    Большое спасибо! Я являюсь поклонником этого метода, чтобы обеспечить дополнительный уровень безопасности для этих токенов, но я думаю, что нет альтернативы хранению токенов в базе данных. Я бы хотел, чтобы SO не закрывал этот вопрос, так как дальнейшее участие было бы полезно для меня и других.
  • 0
    Вы можете подслушивать модераторов в комнате 11, если вы хотите оспорить ее закрытие.
Показать ещё 1 комментарий
1

Хранение сгенерированного токена в базе данных в ясном тексте явно представляет собой риск, но тот, который обычно считается приемлемым. Одним из способов предотвращения является требование повторной аутентификации пользователя перед выполнением чувствительных операций. Например, Amazon, кажется, требует, чтобы я вводил свой пароль, прежде чем изменять свои данные учетной записи, если только я не ввел свой пароль.

  • 0
    Да, я неохотно делал такие вещи, но, думаю, с еще большим хэшированием было бы приемлемо сделать это. В конце концов, если у них есть доступ к моей базе данных, это игра окончена: D
  • 0
    После взлома базы данных это становится вопросом степени. Я рад, что вы выбрали ответ @ ScottArciszewski. У него есть хорошее понимание необходимого хеширования, которое должно быть сделано.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню