Fortifyツールを使用してスキャンすると、「XML外部エンティティインジェクション」でいくつかの問題が発生しました。
TransformerFactory trfactory = TransformerFactory.newInstance();
これは、エラーが表示されている場所です。私はfortifyによって提案されたように以下の修正を与えました
trfactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
trfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
しかし、それでも問題は修正されていません。この問題を修正する方法は?
TransformerFactory trfactory = TransformerFactory.newInstance();
trfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
これで十分です。
Javaバージョンに互換性がない場合は機能しないことがあります。
if (javaVersion > 1.6) {
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
}
else {
if (javaVersion > 1.5) {
dbf.setFeature("http://xerces.Apache.org/xerces2-j/features.html#external-general-entities", false);
dbf.setFeature("http://xerces.Apache.org/xerces2-j/features.html#external-parameter-entities", false);
}
else {
dbf.setFeature("http://xerces.Apache.org/xerces-j/features.html#external-general-entities", false);
dbf.setFeature("http://xerces.Apache.org/xerces-j/features.html#external-parameter-entities", false);
}
}
それは私のために働いた:-)
この行を追加します。それは私のために働いた。
factory.setFeature("http://Apache.org/xml/features/disallow-doctype-decl", true);
次のことも試すことができます。
TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
Transformer transformer = transformerFactoryImpl.newTransformer();
transformer.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
TransformerFactory.newInstance()の代わりに「Xalan」実装クラスを試してみました。それは私のために機能し、強化の問題が修正されました
TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
Transformer transformer = transformerFactoryImpl.newTransformer();