У меня есть простая форма входа, в которой пользователь вводит свое имя пользователя и пароль. Когда php получает переменные через POST, он шифрует пароль до md5, а затем сравнивает его с записями базы данных.
У меня вопрос: будет ли безопаснее зашифровать пароль с помощью javascript в браузере до отправки переменных? Я знаю, что это не надежный метод, но помешает ли это людям в сети перехватить мои пароли? Или это каким-то образом делает пароли более уязвимыми?
Спасибо.
Кстати, скрипт, который я буду использовать для шифрования на md5, находится здесь: http://www.webtoolkit.info/javascript-md5.html
Использование JavaScript для хеширования пароля перед отправкой по сети - самое меньшее, чего я ожидал. Было бы еще лучше, если бы вы использовали CRAM-MD5, Дайджест HTTP, или SSL (эксперты потратили тысячи часов на изучение последствий использования этих протоколов для безопасности).
Вы обязательно должны использовать поваренная соль. Если вы этого не сделаете, пароли легко изменить с помощью радужные столы. Очень простая соль, которая работает довольно хорошо: сервер отправляет случайную соль со страницей. MD5 пароль, затем MD5 первый хэш и соль вместе. На стороне сервера вы можете сохранить пароль MD5 и быстро запустить MD5 для сохраненного хэша и соли со страницы; сравнить и подтвердить подлинность соответствующим образом. Этот вид соли известен как nonce. Вы также должны добавить длинную соль как к исходному паролю, так и к паролю, хранящемуся на сервере.
Итак, "хороший" способ (за исключением SSL и других упомянутых выше):
A = MD5 ( Password + Realm)
B = MD5 ( A + Nonce)
Отправьте B по проводу. Храните A на сервере. При установке A в первую очередь используйте простое обратимое шифрование, такое как ROT или XOR. Лично я бы счел все меньшее, чем это, безответственным, потому что так много пользователей по глупости используют один и тот же пароль для чертовски почти всего (даже Джефф - основатель сайта - сделал это).
Нет, не делай этого. Принудительно используйте SSL на экране входа в систему, тогда вы будете знать, что имя пользователя / пароль зашифрованы при отправке.
Затем, когда ваш PHP-приложение получает пароль, оно может хешировать пароль с помощью MD5 или SHA1 и сохранять его.
Для входа в систему необходимо хешировать полученный пароль и сравнить его с хешированным сохраненным паролем. Если они совпадают, вы разрешаете пользователю пройти.
Между прочим, чтобы предотвратить словарную атаку на вашу базу паролей, вы захотите «засолить» пароль перед хешированием. Видеть: http://en.wikipedia.org/wiki/Salt_(cryptography)
Если вы используете соль в своем хэше, сниффер может легко посетить вашу страницу и получить хеш из вашего javascript. Также, md5 не совсем безопасен в том смысле, что это не защита от столкновений. Так что не делайте этого, просто используйте SSL, если он действительно чувствителен.
Это небезопасно от людей, обнюхивающих сеть.
Подумайте об этом, когда пользователю нужно подключить там javascript-хеши своего пароля и отправить их на сервер. Сервер сравнивает его с базой данных.
Снифферу достаточно будет просто обнюхать пароль и отправить его на сервер, так что это будет так же безопасно, как пароль в виде простого текста.
Как говорили другие, я рекомендую установить туннели SSL / TLS для подключения к вашему серверу.