Исправление исправления для инъекции внешнего объекта XML
Когда я сканировал с использованием инструмента 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);
но все же проблемы не устранены. Как исправить эту проблему?
4 ответа
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);
}
}
У меня это сработало:-)
Я попытался с классом реализации "Xalan" вместо TransformerFactory.newInstance(). Это сработало для меня, и проблема с фортификацией была исправлена
TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
Transformer transformer = transformerFactoryImpl.newTransformer();
Вы также можете попробовать:
TransformerFactoryImpl transformerFactoryImpl = new TransformerFactoryImpl();
Transformer transformer = transformerFactoryImpl.newTransformer();
transformer.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Добавьте эту строку. У меня это сработало.
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);