Security 提高基于web的登录的安全性
现在我的登录系统如下:Security 提高基于web的登录的安全性,security,password-protection,Security,Password Protection,现在我的登录系统如下: 密码长度必须至少为8个字符,并且至少包含一个大小写字母、一个数字和一个符号 密码不能包含用户名作为其子字符串 用户名,salted+hash(使用SHA2)密码存储在数据库中 nonce(salt)对于每个用户都是唯一的,并与用户名和密码一起以明文形式存储 整个登录过程只能通过TLS完成 您如何对以下措施的有效性进行排名以提高安全性 增加密码长度 强制用户每隔X一段时间更改一次密码,新密码不能是上一个Y密码 将nonce大小从32字节增加到64字节(因无可用而删除) 使用
X
一段时间更改一次密码,新密码不能是上一个Y
密码当然,只有当攻击者破坏了数据库(例如:通过SQL注入)而不是应用程序所在的文件系统时,4和6才有效
4使用AES加密salt,密钥仅对进行身份验证的应用程序可用
5多次重新刷新密码
这些步骤仅影响密码文件(DB列)被盗且攻击者可见的情况。nonce只会打败预散列(rainbow表),但这仍然是一件好事,应该保留 (同样,假设您试图最小化受损数据库的影响。)加密nonce意味着攻击者有额外的暴力步骤,但您没有说明nonce的加密密钥存储在哪里。可以安全地假设,如果数据库被破坏,nonce将是纯文本的,或者是简单的解密。因此,攻击者的努力再次成为对每个哈希的暴力 重新灰化只会使暴力攻击花费更长的时间,但可能不会更多,这取决于您对潜在攻击者每秒裂缝的假设 不管您的密码组合要求如何,用户仍然可以使用“更容易猜测”的密码P@ssw0rd“这符合规则。因此,暴力在任何情况下都有可能在某些用户群体中取得成功。(我的意思是强调采取措施防止密码泄露。)
密码存储方案在防止泄露方面听起来相当不错。我会确保身份验证过程的其他部分也是安全的(限制登录尝试、密码过期、SQL注入对策、难以预测的会话令牌等),而不是过度设计这一部分。答案可能在某种程度上取决于网站的性质、用户和攻击者。例如,这是一个黑客可能针对特定帐户(可能是“管理员”帐户)的网站,还是一个他们只想获得尽可能多的帐户的网站?用户的技术水平如何,他们保持自己帐户安全的动机如何?在不知道答案的情况下,我会假设它们不是技术性的,也没有动机 可能产生影响的措施 5)多次重新刷新密码。这可以显著降低所有暴力攻击的速度-哈希1000次,暴力攻击速度降低1000倍 4)使用AES加密salt,密钥仅对进行身份验证的应用程序可用如何使其仅对应用程序可用?它必须存储在某个地方,如果应用程序受到攻击,攻击者很可能会得到它。可能会有一些直接针对DB的攻击,这会产生影响,所以我不认为这是无用的,但这可能不值得。如果您确实这样做了,那么您还可以加密密码本身和数据库中的任何其他敏感数据 6)使用一种salt,它是数据库上较长的、应用程序范围的salt+唯一用户salt的组合。如果您只关心密码,那么是的,这将是实现与4)相同结果的更好方法,当然,它很容易实现 无效措施 3)将nonce大小从32字节增加到64字节。计算rainbow表对于任何salt都是完全不切实际的,因此这只会在攻击者不知道salt的情况下起作用。然而,如果他们可以得到散列密码,他们也可以得到盐 无效和烦人的措施 1)增加密码长度将密码长度增加到8以上不会对暴力时间产生实际影响 2)强制用户更改密码我同意,这将