Я делаю сайт с использованием Python и Flask и задаюсь вопросом о чем-то, что для меня очень важно.Как «разоблачить» вы храните пароль в сеансе?
В прошлом, будучи необразованным программистом, я всегда сохранял пароли пользователей, незашифрованные в сеансе, так что имя пользователя и пароль можно было повторно проверить по запросу. В настоящее время я делаю свой первый серьезный сайт, поэтому я также хочу сделать это намного лучше.
Я знаю, что есть способы обнюхать переменные сеанса, например, путем получения идентификатора сеанса другого человека в том или ином виде. Я хочу знать, в какой форме лучше хранить пароль, чтобы скрыть его от людей, имеющих доступ к данным сеанса.
варианты я думал так далеко:
- Незашифрованная: Логически самый худший вариант.
- Hashed: Например, сохраните
sha256(password)
на сеанс. Это тоже нехорошо, потому что крекеры могут использовать словарные таблицы для получения незашифрованного пароля. - Salted & Hashed: Например, за исключением
sha256(password+hash)
. Это самый безопасный из трех вариантов, но это будет копия записи в базе данных, и мне это не кажется хорошей идеей. Взломщик мог сравнить свой пароль с его собственным хешем и, возможно, выяснить, как соли и хеши создаются для всей базы данных. Я не уверен, что это действительная проблема, но я думаю, что знающий пользователь в Stackoverflow сможет мне сказать. ;) - Salted & Hashed, с базой данных, сохраняющей рекурсивно хэшированную строку: По сути, это кажется хорошим вариантом, но я читал, что рекурсивно хэширование пароля всегда является плохим.
Итак, какой из них рекомендуется? Может быть, пятый, о котором я не думал? Обратите внимание, что эту переменную необходимо использовать для проверки учетных данных пользователя, поэтому мы не можем просто использовать ее с другой солью или так.
Возможно, ваш вопрос лучше подходит для нашего сайта-партнера http://security.stackexchange.com/, так как он больше похож на общие правила безопасности веб-приложений, чем на конкретную проблему программирования. Однако, FWIW, я дал свой ответ ниже. –