用于用户名验证的java和javascript之间的正则表达式差异
目前,我们正在实现一个WSO2身份服务器,我正在检查配置。我的目标是在用户名中启用空格。这些默认情况下是不允许的,并且受到一些正则表达式的保护。我不明白为什么前端和后端的正则表达式不同 以下是取自用于用户名验证的java和javascript之间的正则表达式差异,javascript,java,regex,wso2,wso2is,Javascript,Java,Regex,Wso2,Wso2is,目前,我们正在实现一个WSO2身份服务器,我正在检查配置。我的目标是在用户名中启用空格。这些默认情况下是不允许的,并且受到一些正则表达式的保护。我不明白为什么前端和后端的正则表达式不同 以下是取自repository/conf/user mgt.xml的代码片段: <Property name="UsernameJavaRegEx">[a-zA-Z0-9._\-|//]{3,30}$</Property> <Property name="UsernameJavaSc
repository/conf/user mgt.xml
的代码片段:
<Property name="UsernameJavaRegEx">[a-zA-Z0-9._\-|//]{3,30}$</Property>
<Property name="UsernameJavaScriptRegEx">^[\S]{3,30}$</Property>
<Property name="PasswordJavaRegEx">^[\S]{5,30}$</Property>
<Property name="PasswordJavaScriptRegEx">^[\S]{5,30}$</Property>
<Property name="RolenameJavaRegEx">[a-zA-Z0-9._\-|//]{3,30}$</Property>
<Property name="RolenameJavaScriptRegEx">^[\S]{3,30}$</Property>
是否有某种OWASP用户名验证的最佳实践?到目前为止我什么也没发现
欢迎提供任何帮助或信息。是的,你说得对。如果您不想浪费用户填写表单的时间,它们应该是相同的,或者这无关紧要,因为一个正则表达式对另一个正则表达式施加了限制,有时人们在确定传入数据时不必再次验证。但在您的情况下,前端使用的是一个,可以修改,因此后端使用的应该是精确的 Java中使用的正则表达式似乎允许在用户名中使用特殊字符,如pipe
|
和斜杠/
。关于正则表达式的这种不一致用法,您应该确认它是一种需要或要求
无论使用哪种方法,仅此正则表达式[a-zA-Z0-9.\-|/]{3,30}$
就允许任何类型的字符后面有长度超过30个字符的用户名,因为没有定义字符串锚定的开头^
(您可能需要它)
是否有某种OWASP最佳实践
是的,有。只是不要验证奇怪的字符,即\x00
作为补充说明,您将密码限制在一定的长度。注意,空格被视为文字空格字符-这不是“拆分”。这听起来对我很好。OWASP也不会以任何方式拒绝使用空格,所以我将使用它。谢谢我仍然希望有人对我问题的第一部分有一个解释。太棒了-非常感谢你的澄清!我还想知道为什么我们应该限制密码长度,但我仍然在这个身份服务器设置和清理的事情开始。我觉得我不应该相信他们文档中的每一个配置和示例。
[a-zA-Z0-9._\-|//]{3,30}$ ==> [a-zA-Z0-9 ._\-|//]{3,30}$
^[\S]{3,30}$ ==> ^[\S ]{3,30}$