不是没有SSL
如果密码是通过网络以纯文本格式发送的,则这是不安全的。如果密码是通过网络以纯文本格式发送的,则在服务器端散列密码也是不安全的。
由于HTML <input type="password"/>
标记以纯文本形式发送其内容,因此,无论您如何在服务器上存储密码,这都是一个问题,除非您的网站使用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)
如果用户不存在,则可能需要计算另一个代码路径,以防止攻击者根据花费的时间确定哪些用户名有效,再确定密码不正确。