OWASP ESAPI ライブラリを評価しようとしましたが、適切に初期化するだけで問題が発生しました。ESAPI.properties と validation.properties のリソース フォルダーを設定すると、これらは問題なくクラスパスから読み込まれます。ただし、antisamy-esapi.xml ファイルはクラスパスから読み込まれません。2010 年にこれに関するバグが見つかりました。私が得るエラーは次のとおりです。
ファイル I/O を介してリソース ファイルとして antisamy-esapi.xml を読み込もうとしています。「org.owasp.esapi.resources」ディレクトリに見つからないか、読み取れないファイル: C:\Users\mydir\resin-pro-4.0.27\antisamy-esapi.xml SystemResource ディレクトリ/resourceDirectory に見つかりません: .esapi\antisamy -esapi.xml 'user.home' (C:\Users\mydir) ディレクトリに見つかりません: C:\Users\mydir\esapi\antisamy-esapi.xml
このライブラリを使ったアプリケーションをresinにデプロイしています。上記のすべての場所に xml ファイルを手動で配置しようとしましたが、最終的に機能したのはホーム ディレクトリだけでした。これは、運用展開ではうまく機能しません。
また、 -Dorg.owasp.esapi.resources プロパティを設定するように指示されている、他の場所で見つかった推奨事項に従いました。これもうまくいきませんでしたが、さらに興味深いことに、エラーは変化しませんでした。これは、何らかの理由で設定が取得されなかったと思わせます。
コンテナにデプロイされた後に適切にロードされるように、このファイルをプロジェクト内のどこに配置する必要があるかについてのポインタはありますか?
前もって感謝します。
アップデート:
したがって、コードを掘り下げると、ESAPI.properties をロードするための特殊な関数があるように見えます。これが、コンテナーにデプロイされた標準リソース (またはその他の src dir) ディレクトリからそのファイルをロードできる理由です。ただし、antisamy-esapi.xml の読み込み関数は、user.home の下の特定のディレクトリ、構成されたカスタム ディレクトリ、または ClassLoader.getSystemResource() の結果を介してチェックするだけです。これらのルーチンが分離されている理由がわかりません。これを何時間もいじった後、我慢できなくなり、DefaultSecurityConfiguration.java をコピーし、getResourceFile() メソッドを修正して、loadConfigurationFromClasspath() と同じ検索コードを使用するようにしました。次に、このクラスで ESAPI.override() を呼び出すと、正しく動作するようになりました。