【问题标题】:writing regular expression for password validation为密码验证编写正则表达式
【发布时间】:2019-08-10 11:12:22
【问题描述】:

我正在处理输入卫生问题,并想编写用于密码验证的正则表达式。我使用 OWASP ESAPI 来验证输入参数,但我不能这样做,因为 ESAPI 为密码验证提供的正则表达式不满足所有条件。

比如

• 8-20 个字符,使用字母和数字

• 不能有 3 个或更多连续相同的字母、数字或特殊字符

• 不能包含空格

可选:

• 一个或多个特殊字符,除了“ & ' ⁄ [ \ ] { | } ~ ^ !

• 区分大小写

PWASP ESAPI 正则表达式 -![CDATA[^(?:(?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})[A-Za-z0-9!~<>,;:_=?*+#."&§%°()\|\[\]\-\$\^\@\/]{8,32}$]]

我试图修改它,但我没有得到预期的结果,而且我对正则表达式不是超级知己,因为我以前从未使用过它们。如何创建一个可以包含所有条件的正则表达式?

谢谢

【问题讨论】:

  • 请问:为什么?除了 >1 个特殊字符和 8 个以上字符之外,所有约束都非常糟糕。
  • 代码与遗留应用程序相关
  • NIST 关于密码的建议已更改。 pages.nist.gov/800-63-3/sp800-63b.html 而不是寻求将密码复杂性构建到您的工具中。可能更好地利用服务来检查密码是否已被泄露,并使用某种指导工具来帮助您的最终用户选择更强的密码。
  • 您可能会发现Reference - Password Validation 很有用。

标签: java regex regex-lookarounds


【解决方案1】:

我建议您不要为此使用 RegEx,因为它编写起来很乏味,维护起来更乏味。

您最好寻找一个允许您传递配置的库(例如passay)。

如果您不想这样,您应该使用通用字符串函数来检查长度(str.length(),以及是否存在数字和特殊字符(如 str.matches())。

它不仅更易于维护,而且速度也更快,因为非常复杂的 RegEx 查询很快就会变得很慢。

【讨论】:

    【解决方案2】:

    所以我想出了解决方案,但它的部分

    所以这里是每个条件的正则表达式

    ^((.)\1{3}) - 不能有 3 个或更多连续相同的字母、数字或特殊字符

    [a-zA-Z0-9\S] - 区分大小写,不能包含空格、字母和数字

    [^ \“ & ' [ /]{|}~^!] - 一个或多个特殊字符,除了“ & ' ⁄ [ \ ] { | } ~ ^ !

    {7,20}$ - 范围

    但如果将它们全部组合在一起,它们将无法按预期工作......

    有什么建议吗?

    【讨论】:

    • 这不是一个完整的答案
    • 我知道我刚刚添加了到目前为止发现的内容
    猜你喜欢
    • 2014-12-16
    • 2011-05-06
    • 2016-10-19
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多