ruby-on-rails – 使用Devise防止密码重用
我知道强制密码在用户创建密码后的一段时间后过期,这不是Devise逻辑的一部分,我打算编写自己的代码来实现.
它也看起来强迫用户不要重复使用最后一个X(在我的情况下为10)密码需要手动编码. 我的想法是,我将创建类似user_passwords表的东西,并在我的代码中使用逻辑来确保新密码与该用户的该表中的任何密码都不匹配.同时我会将新密码插入表中,除非该用户已有10条记录,这意味着我将用新值覆盖最旧的密码.表结构将是这样的: user_passwords > user_id 如果有人有更好,更优雅的解决方案来处理这个问题,我会很感激. 解决方法
在实践中,与安全相关的研究发现这是一个坏主意.那是因为每次变化都会收益递减.也就是说,密码开始强大,然后随着用户尝试遵守策略而变得越来越弱.参见Peter Gutmann的Engineering Security和第7章密码. 从书中,其他愚蠢的事情包括复杂性要求. (在您反对之前,请阅读本书的相关部分).
一旦你阅读了这一章,我就可以问:为什么你首先允许用户选择一个弱/受伤/破损的密码?当与Mark Brunett’s list of 10 million leaked passwords结合使用时,那些60 KB Bloom过滤器看起来非常有用:)
重复使用的是跨站点的密码重用. Brown,Bracken,Zoccoli和Douglas在Generating and Remembering Passwords中指出这些数字约为70%(Applied Cognitive Psychology,Volume 18,Issue 6,pp.641-651). Das,Bonneau,Caesar,Borisov和Wang在The Tangled Web of Password Reuse报告的数字约为45%.请注意,Tangled Web研究必须破解密码,因此这个数字可能更高,因为它们无法恢复所有密码 为了使重用成为更严重的问题,用户必须在The Tangled Web of Password Reuse年根据Das,Borisov和Wang记住大约25个不同站点的密码. 几年前我甚至被这个烧了.我在两个低价值账户上使用了相同的密码.然后GNU’s Savannah遭到攻击,攻击者能够使用恢复的密码来破坏一个小小的电子邮件帐户. 现在,当我需要凭据时,我只生成一个长的随机字符串.我甚至不打算为大多数网站写下来.当我需要再次访问某个站点时,我只需要完成恢复过程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |