Правильный способ отправки имени пользователя и пароля с клиента на сервер
Этот вопрос не зависит от языка. Мне интересно, как правильно отправлять имя пользователя и пароль из формы входа на веб-сайт на сервер.
Мое предположение заключается в хеш-пароле, поместите имя пользователя/пароль в тело POST и отправьте его по HTTPS
. Какой лучший способ?
Для хорошей меры я упомянул менее идеальный метод:
http://www.somesite.com/login?un=myplaintextusername&pw=myplaintextpassword
Ответы
Ответ 1
Важными компонентами являются то, что вы передаете данные формы в тело POST (таким образом, он не кэшируется нигде и не сохраняется в каких-либо файлах журналов) и использует HTTPS (таким образом, если у вас есть хороший сертификат SSL/TLS, никто может вынюхивать пароль от наблюдения за сетевым трафиком). Если вы это сделаете, нет никакой дополнительной дополнительной выгоды при хэшировании пароля, по крайней мере, во время передачи.
Почему люди говорят о хэшировании паролей? Поскольку обычно вы не хотите хранить пароль пользователя в форме открытого текста в своей серверной базе данных (в противном случае влияние скомпрометированного сервера еще хуже, чем в противном случае). Вместо этого вы обычно храните соленую/хешированную форму и затем применяете ту же соль/хэш к паролю, полученному через данные формы, чтобы вы могли сравнить эти два.
Для получения дополнительной информации о соляторе см. http://en.wikipedia.org/wiki/Salt_ (криптография) (и ссылки там).
Ответ 2
Вы всегда должны использовать HTTPS и избегать кода на дому. SSL позаботится о хэшировании и шифровании. Это ТОЛЬКО безопасный метод.
Также убедитесь, что вы хешируете пароли на сервере и сохраняете хэш, а не оригинальный пароль. Затем сравните хэши, чтобы проверить логины. Это предотвратит проникновение злоумышленников прямолинейными паролями прямо из вашего db, если он скомпрометирован.
Ответ 3
Если вы используете HTTPS, вы можете отправить имя и пароль в орган POST, который будет защищен от подслушивающих устройств (при условии, что вы доверяете SSL). Вам не нужно хешировать пароль, если вы это сделаете, хеш пароля так же полезен, как и сам пароль, поэтому он ничего не покупает.
Более важный вопрос заключается в том, как вы храните пароль на стороне сервера. Хранение хэшированного пароля приемлемо только при использовании хорошего алгоритма, такого как scrypt. Но это еще не так хорошо, как расширенный протокол, например SRP.