Безопасно ли шифровать мои переменные POST в md5 перед их отправкой?
У меня есть простая форма входа в систему, где пользователь вводит свое имя пользователя и пароль. Когда php получает переменные через POST, он шифрует пароль для md5, а затем сравнивает его с записями базы данных.
Мой вопрос: будет ли безопаснее зашифровать пароль с помощью javascript в браузере перед отправкой переменных? Я знаю, что это не надежный метод, но помешает ли это людям перехватывать мои пароли в сети? Или это делает пароли более уязвимыми в любом случае?
Благодарю.
Кстати, скрипт, который я буду использовать для шифрования md5, находится здесь: http://www.webtoolkit.info/javascript-md5.html
4 ответа
Использование JavaScript для хеширования пароля перед отправкой по сети - это минимум, на который я бы рассчитывал. Было бы еще лучше, если бы вы использовали CRAM-MD5, HTTP Digest или SSL (эксперты потратили тысячи часов, размышляя о последствиях безопасности этих протоколов).
Вы обязательно должны использовать соль. Если вы этого не сделаете, пароли легко поменять местами с помощью радужных таблиц. Очень простая соль, которая работает довольно хорошо, сервер посылает случайную соль со страницей. MD5 пароль, затем MD5 первый хеш и соль вместе. На стороне сервера вы можете сохранить пароль MD5 и запустить быстрый MD5 для сохраненного хэша и соли со страницы; сравнить и подтвердить подлинность соответственно. Этот вид соли известен как одноразовый номер. Вы также должны добавить соль длинной области как к исходному паролю, так и к тому, который хранится на сервере.
Таким образом, "хороший" путь (если не считать 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 хеширует свой пароль и отправляет их на сервер. Сервер сравнивает его с базой данных.
Снифферу нужно будет только прослушать пароль и отправить его на сервер, так что это так же безопасно, как пароль с открытым текстом.
Как говорили другие, я рекомендую установить туннели SSL/TLS для подключения к вашему серверу.
Если вы используете соль в своем хеше, сниффер может легко зайти на вашу страницу и получить хеш из вашего javascript. Кроме того, md5 не совсем безопасен в том смысле, что он не защищен от столкновений. Так что не делайте этого, просто используйте SSL, если он действительно чувствителен.