无法为ESAPI SafeString类型

时间:2018-10-26 06:37:10

标签: java validation input owasp esapi

我正在尝试在现有项目中使用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)

有人可以告诉我我做错了吗?

1 个答案:

答案 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之间的任意数量的字符

$ ==一直到行尾。