Не без SSL
Это небезопасно, если пароль передается по сети в виде простого текста. Хеширование пароля на стороне сервера также небезопасно, если пароль передается по сети в виде простого текста.
Поскольку <input type="password"/>
тег HTML отправляет свое содержимое в виде простого текста, это будет проблемой независимо от того, как вы храните пароль на сервере, если только ваш сайт не использует SSL для передачи пароля.
(HTTP-аутентификация, при которой в браузере появляется диалоговое окно с запросом пароля, может быть или не быть простым текстом, в зависимости от того, какие общие механизмы аутентификации используются у сервера и браузера. Так что это может быть способом избежать этого без использования SSL).
Нет, если администраторы сайта подозревают
Теперь, предположим, что вы используете HTTPS для создания веб-сайта, это может быть безопасно, если вы доверяете своим администраторам сайта (которые могут читать простые текстовые пароли) и другим людям, имеющим доступ к компьютеру, вести себя должным образом. Теперь может быть очевидно, что они могут делать с вашим сайтом все, что захотят (так как они его администрируют), но если они смогут прочитать пароль, они также смогут использовать украденные пары логин / пароль на сайтах других людей.
Способ защиты паролей от администратора
Один безопасный способ хранения и проверки паролей заключается в следующем:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Для хэш-функции попробуйте использовать что-то сильное и то, что еще не имеет хороших радужных таблиц в дикой природе. Вы можете изменить длину соли, если необходимо, обойти радужные столы.
В зависимости от среды, в которой вы находитесь, изменчивости задержки в вашей сети и того, должны ли имена пользователей быть общедоступными, вам может потребоваться вычислить другой путь к коду, hash('0000'+entered_password)
если пользователя не существует, чтобы не дать злоумышленникам определение того, какие имена пользователей являются действительными, на основе времени, которое требуется, определите, что пароль является неправильным.