我正在开始使用ESAPI,但我遇到了问题。我正在尝试创建一个示例规则(Validator.Single = [A-Z] $)。我验证String是否只有一个大写字符。
我在Validator.properties文件中放了Validator.Single = [A-Z] $,但是当我在代码中使用时:
System.out.println(v.isValidInput("Single", "A", "Single", 1, true));
输出告诉我
SecurityConfiguration for Validator.Single not found in ESAPI.properties. Using default:
false
并且给我一个假的,反对一个真的,因为“A”是一个有效的字母。
任何人都知道我还有什么要做的?或者我的规则不好?
感谢您的回复。
答案 0 :(得分:0)
您的Validator.Single=[A-Z]$
应该是
Validator.Single=^[A-Z]$
记下正则表达式开头的插入字符(^)。您可以在Lars'Java Regex Tutorial
中阅读有关Java正则表达式的更多信息答案 1 :(得分:0)
这里的问题很可能与类路径有关。在运行调用ESAPI的进程时,您是告诉jvm您的属性文件所在的位置,还是您自己从源代码编译库?
我没有足够的关于你如何运行这行代码,但我怀疑你使用的esapi jar中有一个validation.properties
文件,因此它没有找到你的那个想。
但是,您的进程已运行,请确保将以下属性传递给jvm:
-Dorg.owasp.esapi.resources="<path_to_your_resources_directory>"
或者,如果正在编译,请确保您正在更改src/main/resources
答案 2 :(得分:0)
如果您查看 org.owasp.esapi.reference.DefaultSecurityConfiguration#getValidationPattern
,您会发现如果抛出 PatternSyntaxException
,即使它在 "SecurityConfiguration for " + key + " not a valid regex in ESAPI.properties. Returning null"
中定义,日志也会显示 validation.properties
。
因此,在您修复正则表达式语法后,它应该可以正常工作。