WebLogic XML外部エンティティの解決:XMLレジストリを使用する以外の方法はありますか?
-
06-07-2019 - |
質問
SiteMeshを使用するアプリケーションがあり、WebLogicがTLDファイルを解析しようとすると、TLD DTDへの参照を含むDOCTYPE仕様が" http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd "。
サーバーはインターネットへのアウトバウンド接続を開始できないため、DTDを取得できず、アプリケーションのデプロイメントが失敗します。
この問題は、WebLogicコンソールでXMLレジストリを設定し、解決しようとしたときに返すローカルファイルを指定することで解決できることを理解しています。たとえば、" http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd "。
外部エンティティ参照を解決するためにサーバーが「ネット」に出ないようにする他の方法はありますか? DTDをアプリケーションにパッケージ化し、どうにかして「外に」ではなく、そこにあるDTDを探すようにサーバーに通知しますか?
解決
簡単な質問セキュリティ上の理由でこれをしようとしていますか?あらゆる種類の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パーサーを使用する意味がある場合は調べてください。