1

我正在开发一个 asp.net 应用程序,其中一个安全要求是应用程序必须输入“密码历史记录” - (记住之前的 8 个密码)。

我想知道是否有人有为此目的设计表(使用 SQL 2008)的经验。到目前为止,我只想有一个表,每个以前的密码一个字段和一个密码日期字段。

还有其他建议/最佳实践吗?

4

3 回答 3

1

我会创建一个密码历史表,仅用于存储旧密码,当然是加盐和散列的。这是一个经典的一对多关系,8 个不同的旧密码有 8 个字段似乎很脆弱。

您可以将每个历史密码的日期与它一起存储在密码历史表中,以便在他们更改密码超过 8 次时过期。

于 2012-06-11T19:52:22.237 回答
1

请记住对密码更改实施速率限制。我的经验表明,如果您放弃这个机会,用户会发现是否没有密码,并且会连续 9 次更改密码以最终使用旧密码...

其他最佳实践实际上取决于您希望系统有多安全。例如,我见过的一件事是尝试使用新密码作为种子(对于现有工具)或基本迭代进行 10 秒的暴力破解。即,如果您看到 foobar5 形式的密码,请尝试查看 foobar1/2/3/4 是否匹配任何旧哈希值。

于 2012-06-12T20:33:12.793 回答
1

您的建议听起来不错,但我建议您存储密码的加盐哈希值。您需要保持每个用户的 salt 不变并将其存储在用户表中,或者如果您想在每次更改密码时刷新 salt,则将其与先前的密码条目一起存储。第一个选项使用最简单的数据库查询来检查以前的密码 - 后者您必须单独进行每个比较。

于 2012-06-11T19:41:38.303 回答