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

これは、への呼び出しが、正規表現エンジンに渡される前に 、入力を char シーケンス (リテラルではありません!)に変換する呼び出しをvalidator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);ラップするために発生します。ESAPI.encoder().canonicalize()StringC:TEMP'0x0C'ile.txt

2 番目の "\" が に変換されることを除いて、char 0x0cこれは通常望ましい動作です。これは ESAPI のバグである可能性があります。

あなたが望むのは、ESAPI.validator().getValidDirectoryPath()を呼び出すことです。

于 2014-07-02T15:48:44.713 に答える