【发布时间】: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