4

SiteMesh を使用するアプリケーションがあり、WebLogic が TLD ファイルを解析しようとすると、「http://java.sun.com/dtd/web-jsptaglibrary_1_2. dtd」。

サーバーはインターネットへのアウトバウンド接続を開始できないため、DTD を取得できず、アプリケーションの展開が失敗します。

この問題は、WebLogic コンソールで XML レジストリを設定し、解決しようとしたときに返されるローカル ファイルを指定することで解決できることを理解しています。 dtd」。

外部エンティティ参照を解決するためにサーバーが「ネット」に出ないようにする他の方法はありますか? DTD をアプリケーションにパッケージ化し、その DTD を「外部」ではなく内部で検索するようにサーバーに通知することでしょうか。

4

1 に答える 1

2

簡単な質問ですが、セキュリティ上の理由からこれを行おうとしていますか? あらゆる種類の XXE 攻撃を防ぎたいですか?

その場合、独自の EntityResolver を実装し、パーサーがローカルまたはリモートでルックアップを行う方法を処理できます。

例はここにあります https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=61702260

それ以外の場合は、必要な動作を得るために XMLInputFactory の構成プロパティを設定する必要があります。特に javax.xml.stream.isSupportingExternalEntities と javax.xml.stream.isValidating は、検証が必要かどうかに依存します。

http://docs.oracle.com/javaee/5/api/javax/xml/stream/XMLInputFactory.html

使用に意味がある場合は、StaX パーサーも調べてください。

于 2012-09-26T15:52:16.753 に答える