2

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

我将 OWASP ESAPI 2.1.0 与 JavaEE 一起使用,以帮助我验证 Web 应用程序中的某些条目。在某些时候,我需要验证 Windows 文件路径,因此我在“validation.properties”中添加了一个新的属性条目,如下所示:

Validator.PathFile=^([a-zA-Z]:)?(\\\\[\\w. -]+)+$

例如,当我尝试通过 ESAPI 验证像“C:\TEMP\file.txt”这样的字符串时,我得到一个 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")

我必须说我在“validation.properties”中添加了其他正则表达式并且工作正常。这个怎么这么难?谁能帮我解决这个问题?

4

1 回答 1

5

之所以发生这种情况,是因为对validator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);包装的调用ESAPI.encoder().canonicalize()将输入转换为字符序列(不是文字String!)C:TEMP'0x0C'ile.txt,然后再传递给正则表达式引擎。

除了第二个“\”被转换为char 0x0c这通常是期望的行为。这可能是 ESAPI 中的错误。

你想要的是调用ESAPI.validator().getValidDirectoryPath()

于 2014-07-02T15:48:44.713 回答