【问题标题】:Unable to define max length for ESAPI SafeString Type无法为 ESAPI SafeString 类型定义最大长度
【发布时间】:2023-08-09 07:58:01
【问题描述】:

我正在尝试在我现有的项目中使用 ESAPI。 我在尝试对 SafeString 类型使用 ESAPI.validator().getValidInput() 方法时遇到错误。

以下是自动定义的正则表达式,包含在validation.properties 文件中:

Validator.SafeString=^[.\\p{Alnum}\\p{Space}]{0,1024}$

我假设最大长度是 1024。

这是我的代码:

ESAPI.validator().getValidInput("Validationofinput",_appendToSelect,"SafeString",1024, true)

但是,我收到以下错误:

WARN IntrusionDetector - [安全故障匿名:null@unknown -> /ExampleApplication/IntrusionDetector] 输入无效: 上下文=输入验证, type(SafeString)=^[.\p{Alnum}\p{Space}]{0,1024}$, input=and ProductCategory like '%test_%' org.owasp.esapi.errors.ValidationException:Validationofinput:无效 输入。请使用正则表达式 ^[.\p{Alnum}\p{Space}]{0,1024}$ 最大长度为 1024 在 org.owasp.esapi.reference.validation.StringValidationRule.checkWhitelist(StringValidationRule.java:144) 在 org.owasp.esapi.reference.validation.StringValidationRule.checkWhitelist(StringValidationRule.java:160) 在 org.owasp.esapi.reference.validation.StringValidationRule.getValid(StringValidationRule.java:284) 在 org.owasp.esapi.reference.DefaultValidator.getValidInput(DefaultValidator.java:214) 在 org.owasp.esapi.reference.DefaultValidator.getValidInput(DefaultValidator.java:185)

谁能告诉我我做错了什么?

【问题讨论】:

  • 我们可以,但不能没有输入。
  • @avgvstvs,你是什么意思?我在那里输入了 input=and ProductCategory like '%test_%'

标签: java validation input owasp esapi


【解决方案1】:

好的,

这失败是因为您的输入与正则表达式不匹配,而不是因为长度违规。

Posix 标准指定\p{Alnum} 对应于正则表达式[a-zA-Z0-9]\p{Space} 对应于\s。在您的情况下,您的输入将因以下字符而失败:'%_

^[.\\p{Alnum}\\p{Space}]{0,1024}$:

^ == 行首

[ == 启动一个字符类,任意顺序匹配以下任意一个字符

. == 匹配一个 ASCII 句点

\\p{Alnum} == 匹配任何 ASCII 字母字符或数字,大写或小写。

\\p{Space} == 匹配任何 ASCII 空格

] == 结束字符类

{0,1024} == 匹配从 0 到 1024 的任意数量的字符

$ == 一直到行尾。

【讨论】: