【问题标题】:How should passwords be securely stored for web hosting? [duplicate]应如何安全地存储虚拟主机的密码? [复制]
【发布时间】:2011-03-08 09:39:07
【问题描述】:
可能重复:
Encrypting/Hashing plain text passwords in database
最近,我发现主要的网络托管公司以明文形式存储其用户的密码,甚至在尝试验证其身份时要求提供用户密码的最后 4 位数字。这似乎是非常错误的并且充满了安全问题。我相信他们这样做的原因只是为了帮助识别用户。
- 安全存储用户密码的正确方法是什么?在不询问密码(例如通过电话)的情况下,安全可靠地识别用户身份的正确方法是什么?
- 谷歌搜索了一下,似乎很多人都在抱怨几个流行的网络托管服务提供商使用明文方法。许多网络托管服务提供商使用这种明文存储密码的方法真的是真的吗?有哪些流行的网络托管服务商可以安全可靠地存储用户的个人信息?
【问题讨论】:
标签:
security
passwords
identity
web-hosting
plaintext
【解决方案1】:
1a) 不要存储用户的密码,只存储它的(加盐的)哈希值。当用户登录时,对他们提供的密码进行哈希处理,并将其与您存档的哈希值进行比较。如果您不知道用户的真实密码,就不能危及其安全性。
1b) 通过电话安全地识别用户是很困难的,您将付出的努力程度取决于未经授权访问该帐户的“危险”程度。我的银行账户要求我用我的家、工作单位或手机号码(我已经提前与他们列出)打电话。您可以要求呼叫者验证您存档的随机选择的帐户信息(例如帐号、帐单邮政编码、中间名首字母、出生日期、信用卡号中的第七位数字等)。一些基于电话的系统具有不同于普通密码/PIN 的每个用户的 PIN 号。您可以通过短信向来电者发送一次性密码到他们的手机,并要求他们在一定时限内将其输入系统。我见过的更安全的系统之一使用Verisign's VIP Mobile 应用程序来生成一次性密码。 (当然如果有人偷了你的手机,也没多大用处)
2) 我怀疑信息是否公开。如果有一个不安全地存储用户帐户信息的公司列表,它会兼作“请黑我”列表,这些公司会受到入侵企图的抨击。
【解决方案2】:
关于#1 - 正确的做法是根本不存储密码。相反,存储密码的加盐哈希。
至于在不询问密码的情况下安全地识别用户,这是一个棘手的问题。本质上,您可能用来识别它们的任何东西都会变成另一个密码(与第一个密码具有相同的存储问题)。实际上,大多数服务会使用其他一些个人信息——soc 的最后 4 位。秒。号码、母亲的娘家姓或“安全问题”。不过,几乎可以肯定,所有这些都不如一个好的密码安全。
【解决方案3】:
您通常根本不想存储密码——您存储了加盐密码的哈希值。当他们想要让你登录时,对他们提供的密码进行加盐和哈希处理,并将结果与存储的哈希值进行比较。
【解决方案4】:
解决您问题的第一部分:根本不要存储密码。存储密码的哈希值,加盐。
为了通过电话识别他们,我可能会让他们先提前验证电话号码,然后将其与他们可以定义的秘密问题结合使用。
遗憾的是,许多主机不安全地存储密码。我没有足够的经验来评论这方面的好房东。