Правильный способ отправки имени пользователя и пароля с клиента на сервер - PullRequest
34 голосов
/ 27 сентября 2011

Этот вопрос не зависит от языка. Мне любопытно, как правильно отправить имя пользователя и пароль из формы входа на веб-сайт на сервер.

Я предполагаю, что нужно хешировать пароль, ввести имя пользователя / пароль в теле сообщения POST и отправитьэто более HTTPS.Что может быть лучше?

Для правильной меры я упомяну менее чем идеальный метод:

http://www.somesite.com/login?un=myplaintextusername&pw=myplaintextpassword

Ответы [ 3 ]

49 голосов
/ 27 сентября 2011

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

Почему тогда люди говорят о хешировании паролей?Потому что обычно вы не хотите хранить пароль пользователя в виде открытого текста в вашей серверной базе данных (в противном случае влияние взломанного сервера будет даже хуже, чем было бы в противном случае).Вместо этого вы обычно сохраняете соленую / хешированную форму, а затем применяете ту же соль / хэш к паролю, полученному через данные формы, чтобы вы могли сравнить их.

Для получения дополнительной информации о солении см. http://en.wikipedia.org/wiki/Salt_(cryptography) (и ссылки там).

6 голосов
/ 27 сентября 2011

Если вы используете HTTPS, вы можете отправить имя и пароль в теле сообщения POST, которое будет защищено от перехватчиков (при условии, что вы доверяете SSL). Вам не нужно хешировать пароль, если вы это сделаете, то хеш пароля так же полезен, как и сам пароль, поэтому он ничего не покупает.

Более важный вопрос - как вы храните пароль на стороне сервера. Хранение хешированного пароля допустимо, только если вы используете хороший алгоритм, такой как scrypt . Но это все же не так хорошо, как расширенный протокол, такой как SRP .

5 голосов
/ 27 сентября 2011

Вы всегда должны использовать HTTPS и избегать домашнего кода. SSL позаботится о хешировании и шифровании. Это единственный безопасный метод.

Также убедитесь, что вы хэшируете пароли на стороне сервера и сохраняете хеш, а не оригинальный пароль. Затем сравните хэши, чтобы проверить логины. Это предотвратит злоумышленников, читающих незашифрованные пароли прямо из вашей базы данных, если она скомпрометирована.

...