我正在尝试在现有项目中使用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]无效的输入: context =输入验证, type(SafeString)= ^ [。\ p {Alnum} \ p {Space}] {0,1024} $,input =和 类似于“%test_%”的ProductCategory org.owasp.esapi.errors.ValidationException:输入的验证:无效 输入。请遵循正则表达式^ [。\ 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)
有人可以告诉我我做错了吗?
答案 0 :(得分:0)
好吧
之所以失败,是因为您的输入与正则表达式不匹配,不是因为长度冲突。
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之间的任意数量的字符
$
==一直到行尾。