使用Devise防止密码重用

yuя*_*uяi 4 ruby-on-rails devise

我知道强制密码在用户创建密码后的一段时间后过期不属于Devise逻辑,我打算编写自己的代码来实现.

它也看起来强迫用户不要重复使用最后一个X(在我的情况下为10)密码需要手动编码.

我的想法是,我将创建类似user_passwords表的东西,并在我的代码中使用逻辑来确保新密码与该用户的该表中的任何密码都不匹配.同时我会将新密码插入表中,除非该用户已有10条记录,这意味着我将用新值覆盖最旧的密码.表结构将是这样的:

user_passwords

  • 用户身份
  • encrypted_pa​​ssword
  • created_at

如果有人有更好,更优雅的解决方案来处理这个问题,我会很感激.

jww*_*jww 7

我知道强制密码在用户创建密码后的一段时间后过期不属于Devise逻辑,我打算编写自己的代码来实现.

在实践中,与安全相关的研究发现这是一个坏主意.那是因为每次变化都会收益递减.也就是说,密码开始强大,然后随着用户尝试遵守策略而变得越来越弱.参见Peter Gutmann的工程安全和第7章密码.

从书中,其他愚蠢的事情包括复杂性要求.(在您反对之前,请阅读本书的相关部分).


...创建类似user_passwords表的东西,并在我的代码中使用逻辑来确保新密码与该用户的该表中的任何密码都不匹配.

一旦你阅读了这一章,我就可以问:为什么你首先允许用户选择一个弱/受伤/破损的密码?当与Mark Brunett的1000万泄露密码列表结合使用时,这些60 KB Bloom过滤器看起来非常有用:)


防止密码重用...

重复使用的是跨站点的密码重用.Brown,Bracken,Zoccoli和Douglas表示,生成和记忆密码的数字约为70%(应用认知心理学,第18卷,第6期,第641-651页).而Das,Bonneau,Caesar,Borisov和Wang在The Tangled Web of Password Reuse中报告的数字约为45%.请注意,Tangled Web研究必须破解密码,因此这些数字可能更高,因为它们无法恢复所有密码

为了使重用更加严重,用户必须记住大约25个不同站点的密码,根据Das,Bonneau,Caesar,Borisov和Wang在The Tangled Web of Password Reuse中的密码.

几年前我甚至被这个烧了.我在两个低价值账户上使用了相同的密码.然后GNU的Savannah遭到攻击,攻击者能够使用恢复的密码来破坏一个小小的电子邮件帐户.

现在,当我需要凭据时,我只生成一个长的随机字符串.我甚至不打算为大多数网站写下来.当我需要再次访问某个站点时,我只需要完成恢复过程.