使用 Esapi 验证时出错

Nex*_*tor 2 java regex validation owasp esapi

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

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

Validator.PathFile=^([a-zA-Z]:)?(\\\\[\\w. -]+)+$
Run Code Online (Sandbox Code Playgroud)

例如,当我尝试通过 ESAPI 验证像“C:\TEMP\file.txt”这样的字符串时,我得到一个 ValidationException:

ESAPI.validator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);
Run Code Online (Sandbox Code Playgroud)

或者,我还尝试使用java.util.regex.Pattern类来测试具有相同字符串示例的相同正则表达式,并且它工作正常:

Pattern.matches("^([a-zA-Z]:)?(\\\\[\\w. -]+)+$", "C:\\TEMP\\file.txt")
Run Code Online (Sandbox Code Playgroud)

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

avg*_*tvs 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()