【问题标题】:Regex difference between java and javascript for username validationjava和javascript之间用于用户名验证的正则表达式区别
【发布时间】:2023-04-11 10:04:01
【问题描述】:

目前我们正在实施 WSO2 身份服务器,我正在检查配置。我的目标是在用户名中启用空格。这些默认情况下是不允许的,并受某些正则表达式保护。我不明白为什么前端和后端的正则表达式存在差异。

这是取自repository/conf/user-mgt.xml的sn-p:

<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>

第一件事是我不明白为什么用户名/角色名的那些正则表达式对于前端/后端是不同的,而密码的正则表达式是相等的?他们不应该都对后端/前端使用相同的正则表达式吗?当前的示例和文档有点奇怪。例如前端接受包含“:”的用户名,而后端不接受?

第二件事是我不确定我是否只是通过允许空白空间作为这些正则表达式的一部分来分解事物(不好的做法?)。

[a-zA-Z0-9._\-|//]{3,30}$    ==>    [a-zA-Z0-9 ._\-|//]{3,30}$
^[\S]{3,30}$                 ==>    ^[\S ]{3,30}$

对于用户名验证是否有某种 OWASP 最佳实践?到目前为止,我没有发现任何东西......

欢迎任何帮助或信息。

【问题讨论】:

  • 请注意,空格被算作文字空格字符 - 这不是“破坏”。
  • 这对我来说听起来不错。 OWASP 也不拒绝以任何方式使用空格,所以我将使用它。谢谢!我仍然希望有人对我的问题的第一部分做出解释。

标签: javascript java regex wso2 wso2is


【解决方案1】:

是的,你是对的。如果您不想浪费用户时间填写表格,它们应该是相同的,或者没关系,因为一个正则表达式限制另一个正则表达式,有时人们在确定传入数据时不会费心再次验证.但是在您的情况下,前端使用了一个,可以对其进行修改,因此后端使用的那个应该是精确的。

Java 中使用的正则表达式似乎允许在用户名中使用管道| 和斜线/ 等特殊字符。关于正则表达式的这种不一致的用法,您应该确认它是一种需要或要求。

无论使用哪种方法,这个正则表达式 [a-zA-Z0-9._\-|//]{3,30}$ 单独允许用户名长度超过 30 个字符跟随任何类型的字符,因为没有定义字符串锚点 ^ 的开头(您可能需要它)。

是否有某种 OWASP 最佳实践...

是的,有。只是不要验证奇怪的字符,即\x00

附带说明,您将密码限制在一定长度which you shouldn't

【讨论】:

  • 太棒了 - 非常感谢您的澄清!我也想知道为什么我们应该限制密码长度,但我仍处于此身份服务器设置和清理工作的开始阶段。我觉得我不应该相信我在他们的文档中找到的每个配置和示例。
猜你喜欢
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2016-11-18
  • 2012-02-22
  • 2023-04-07
  • 2011-10-10
  • 2011-06-09
  • 1970-01-01
相关资源
最近更新 更多