密码 – Web应用程序 – 存储密码
我错过了什么吗?是否有任何其他步骤将密码存储到数据库?
存储密码: >分配全站点静态盐. (16兰特字符包括0-9,a-z,A-Z,[] / * – ‘) >攻击#1:攻击者通过SQL注入转储数据库. 在转储后攻击者可以 通过使用此类安全性,不允许转储数据库来破坏存??储的密码.用户仍然必须通过另一种方法找到$sitewideSalt. 下一步去哪儿?
我们现在需要做的是使用耗时的算法扩展散列函数,例如bcrypt. bcrypt的工作负载系数可以是简单哈希函数的5-6个数量级.破解一个密码可能需要数年而不是几分钟.并且作为奖励,bcrypt已经为每个哈希生成随机盐并将其存储在结果哈希中. > http://www.grc.com/haystack.htm 解决方法
干得好!看起来非常完整.
我只有建议: 旋转服务盐. 设计一种定期旋转服务范围的盐并定期锻炼的方法. 例如,在生成新的服务盐之后,将其用于所有新帐户&任何密码更改.当现有用户尝试登录时,使用旧服务盐对其进行身份验证.如果成功,则使用新服务盐(以及可选的新用户特定盐)更新其哈希值.对于未“登录”某段时间的用户,请代表他们随机生成新密码.这将为那些放弃您网站的用户“保持”安全性,迫使那些返回使用密码重置设施的用户. (‘一段时间’=你不熟悉的任何时期). 不要硬编码服务盐. 不要让LFI攻击危及您的服务盐.在启动时将service-salt提供给应用程序,并将其保存在内存中.为了破坏服务盐,攻击者需要能够执行代码以从内存中读取salt.如果攻击者能够做到这一点,那么无论如何你都会受到很好的冲击. =) 不要重复使用用户盐. 寻找机会为用户提供新盐.用户更改了密码?生成一个新的随机盐.如果攻击者能够在他感觉到的时候能够获得他的哈希,这进一步阻碍了暴力强制你的服务器范围的盐.结合这个经常旋转你的服务盐,我打赌你已经有强大的威慑力来打击暴力. (如果其他人有其他想法,请将此标记为社区维基). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |