我希望有人可以帮我解决一些问题。
我正在使用带有JavaEE的OWASP ESAPI 2.1.0来帮助我验证Web应用程序中的某些条目。在某些时候我需要验证Windows文件路径,所以我在' validation.properties'中添加了一个新的属性条目。喜欢这个:
Validator.PathFile=^([a-zA-Z]:)?(\\\\[\\w. -]+)+$
当我尝试验证时,例如," C:\ TEMP \ file.txt"通过ESAPI,我得到一个ValidationException:
ESAPI.validator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);
或者,我也尝试使用 java.util.regex.Pattern 类来测试具有相同字符串示例的相同正则表达式,并且它可以正常工作:
Pattern.matches("^([a-zA-Z]:)?(\\\\[\\w. -]+)+$", "C:\\TEMP\\file.txt")
我必须说我在“验证。属性”中添加了其他正则表达式。并且工作正常。为什么这么难?任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
这种情况正在发生,因为对validator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);
的调用包含对ESAPI.encoder().canonicalize()
的调用,该调用正在将输入转换为char序列(非文字String
!)C:TEMP'0x0C'ile.txt
之前传递到正则表达式引擎。
除了第二个" \"转换为char 0x0c
这通常是期望的行为。这可能是ESAPI中的一个错误。