【问题标题】:Regex password checker正则表达式密码检查器
【发布时间】:2011-12-30 13:59:27
【问题描述】:

我正在创建一些正则表达式代码,以便在客户尝试创建帐户时检查密码。目前我有两段代码在测试时似乎可以工作:-http://www.regexplanet.com/simple/index.html

第一位是:

^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

这可以确保:

  • 密码长度为 8 位
  • 至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符

第二部分是:

\S*(.)\1{3,}\S*

这可以确保:

匹配任何 4 个或更多连续的相同字符。

问题是,我怎样才能将它们结合起来?我试过无济于事,但它们似乎单独工作正常。

谢谢

【问题讨论】:

  • 阅读:xkcd.com/936
  • 首先,您应该注意,由于正则表达式错误,那些 (?=) 前瞻在 Internet Explorer 的 Javascript 中不起作用:blog.stevenlevithan.com/archives/regex-lookahead-bugregexadvice.com/blogs/mash/archive/2009/02/21/…
  • 有什么理由不单独检查它们吗?一般来说,我可能更愿意做几项简单的检查,而不是一项大规模的检查。这样,当您稍后回来查看它或其他开发人员来查看它时,它将很明显它在做什么。如果您因为使用两个正则表达式而不是一个而看到性能问题,我会感到非常惊讶......
  • @AricTenEyck 任何依赖 JavaScript 验证输入的人都应该吊销其编程许可证。这是标记为 c#,所以我敢打赌 OP 正在使用 C# 进行验证。
  • 关于正则表达式的一些事情:它们非常强大,非常不可读,而且并非适用于所有用途。正则表达式处理程序也并非都是平等的。创建小型正则表达式并将它们链接在一起要好得多。当然,您想避免错误,因此创建一组测试(使用实时正则表达式评估器)。最后,把它们评论出来,因为下一个草皮(例如几年后的你)将花费更多的时间来理解它们,而不是你创造它们的成本。

标签: c# regex security passwords


【解决方案1】:

您可能需要考虑允许密码长度至少超过 12 个字符。帮自己一个忙,也帮您的客户一个忙,并允许客户使用大于 12 个字符的任何大小的密码。小于 12 的任何东西都非常容易被暴力破解。

至于你的问题,我会让其他人回答。

【讨论】:

  • a) 应该是评论(线索是当你在回答中说这不是答案时)b) 他当前的正则表达式似乎允许密码长度超过 8 个字符。
  • 如果他们愿意,他们可以使用 255 个字符的密码。要求不是我的,是要坚持ISO27001。
  • @Chris - 我不得不说的是渴望发表评论。问题的措辞方式似乎是常规表达方式是将密码限制为 8 个字符。我没有复制相同的 reg 表达式是有原因的,有 3 人评论,但 8 个字符被缩短的观点是有效的。
  • 您的回复长度为 325 个字符,对于评论来说根本不算长。尽管我可以看到可能存在一些歧义,并且无论说密码不应该被限制长度有什么好处,它仍然不是问题的答案,因此不应该作为答案而不是评论。
【解决方案2】:

如果您只是将第二个正则表达式与第一个正则表达式结合起来,您将要求所有密码包含四个连续的相同字符,我很确定您希望禁止这样做。试试这个:

^(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?:(.)(?!\1{3}))+$

最后一组一次捕获一个字符,每次都进行负前瞻,以确保后面不会再出现三个相同的字符。请注意,我从您的第一个正则表达式的开头删除了 .*。那从不属于那里,尽管它以前并没有真正伤害任何东西。但是在这个正则表达式中,最后一组必须是唯一消耗字符的部分,否则它没有任何好处。

【讨论】:

    【解决方案3】:

    为什么不只运行两个单独的测试?上面的正则表达式模式已经足够复杂了。将它们分开将使代码更易于理解,并且还可以让您灵活地添加/删除其他测试,而无需触及已经工作的模式。此外,根据哪个测试失败,您可以向用户提供更详细的错误消息。

    【讨论】:

    • 谢谢,最后我采用了这种方法。
    猜你喜欢
    • 2010-11-12
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多