使用Esapi验证时出错

时间:2014-06-30 22:21:02

标签: java regex validation owasp esapi

我希望有人可以帮我解决一些问题。

我正在使用带有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")

我必须说我在“验证。属性”中添加了其他正则表达式。并且工作正常。为什么这么难?任何人都可以帮我解决这个问题吗?

1 个答案:

答案 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中的一个错误。

您想要的是打电话给ESAPI.validator().getValidDirectoryPath()