【问题标题】:Best Technique to Store Password History for Users?为用户存储密码历史的最佳技术?
【发布时间】:2013-04-10 23:38:31
【问题描述】:

我正在开发一个 PHP 登录系统。我想实施一个限制,以便用户不能使用他们以前使用过的密码(最多 5 个旧密码)。存储密码的最佳选择是什么?我想出了两个想法:

1) 表:密码 列:PasswordID、UserID、Password1、Password2、Password3、Password4、Password5、LastChanged、CurrentPassword。 每个用户都有自己的行。随着时间的推移填满列并相应地重写。

或

2) 表:密码 列:PasswordID、UserID、Password、DateChanged。 每个用户最多有 6 行。 PHP 将处理找出哪个是当前通过日期。

【问题讨论】:

  • 这更像是一种观点而不是事实,但我会坚持 2)。它更灵活。旁注:希望您使用像 BCrypt 这样的加盐哈希存储密码。
  • 加密将是 BCrypt ;)
  • +1 用于加密! ;-)

标签: php sql passwords history


【解决方案1】:

选项 2 是两个选项中较好的一个,只是您不必担心删除行。大多数 RDBMS 都有一种基于某些东西选择前 N 条记录的方法。

选项 2 更好的主要原因是,如果您增加或减少必须查询的记录数,您可以简单地更新数据库记录。

【讨论】:

  • 有道理,谢谢。您还给了我一个想法,通过一遍又一遍地快速更改密码来防止滥用重置密码历史。通过单独跟踪密码,我可以实施重置/更改年龄限制!
【解决方案2】:

虽然我的回答来晚了,但你的#2 更好。但是,我只是通过创建一个触发器来创建用户密码历史记录,该触发器在更新另一个表之前存储用户表行。从这里开始,php 脚本会根据此备份表上的最后五个密码对新密码进行反检查。

这避免了用垃圾记录过度填充用户表,从而加快了登录验证和新密码过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2021-04-25
    • 2012-02-26
    相关资源
    最近更新 更多