Nil*_*ner 11 migration security hash
更改应用程序的密码哈希算法时,系统应如何迁移已保存在数据库中的值?我很清楚我无法以散列形式迁移它们但我需要输入数据才能计算新散列.
有两种情况我可以访问输入数据:
显然只有在其中一个我能够将新哈希保存到数据库以迁移密码.
虽然我的所有同事都投票支持方法1,但我的直觉告诉我不要这样做.有推荐的方法吗?
And*_*ndy 16
我认为没有理由不在登录时这样做.有没有理由你不想做#1?您验证新哈希,如果失败,则验证旧哈希算法.如果有效,我会在旧的哈希上写新哈希.这意味着您的密码将被更快地转换,因为用户可能登录的内容比他们更改密码更多.除非你强迫人们,否则我怀疑大多数人会自己改变它.
如果您不想接触旧的身份验证代码(即切换到新框架)或只想摆脱旧密码字段,这里有一个替代解决方案:
备份现有的密码表,然后删除该表中密码列中的所有现有条目(当然,如果需要,还更新列类型),以便准备好接收具有新加密的新密码。
下次用户尝试登录时,检查密码表,如果用户没有密码,则提示他们“我们已经实施了系统范围的升级,所有帐户都需要通过电子邮件重新验证。我们已发送您的邮箱,请使用该邮箱完成您的账户升级。给您带来的不便,我们深表歉意。 ”
用户将转到他们的电子邮件并单击一个链接,该链接可能会显示“重新确认我的帐户”之类的内容。他们将被带到需要一些安全令牌参数的页面,从电子邮件中给出的链接接收。此页面现在将要求他们输入用户名和密码(更重要的是密码)以完成升级。您可以要求他们输入密码两次,以防止输入错误。从技术上讲,您是在此处创建他们的密码。只需在标有“密码”和“确认密码”的 2 个输入中询问即可。
与其他解决方案相比,这个解决方案当然也有优点和缺点。好消息是,您不必在新环境中添加旧的散列代码并将其放置在那里,直到有一天您的所有用户最终再次登录。但是这个解决方案也伴随着编写额外代码(发送电子邮件/令牌等的代码)的代价。您必须将这项工作与您提议的解决方案所涉及的工作进行比较,即拦截传入的表单输入、检查旧的散列,然后传递到新的身份验证代码。只是给你的另一个想法。
| 归档时间: |
|
| 查看次数: |
5020 次 |
| 最近记录: |