2015-08-24 28 views
2

我的問題:如何防止XML外部實體注入上的TransformerFactory

Fortify的4.2.1被標記下面代碼XML外部實體攻擊的敏感。

TransformerFactory factory = TransformerFactory.newInstance(); 
StreamSource xslStream = new StreamSource(inputXSL); 
Transformer transformer = factory.newTransformer(xslStream); 

解決方案我曾嘗試:

  1. XMLConstants.FEATURE_SECURE_PROCESSING設置了TransformerFactory功能爲true。

  2. 研究爲TransformerFactory提供更多此類功能的可能性,就像我們爲DOM和SAX解析器所做的一樣。例如不允許doctype聲明等,但TransformerFactoryImpl似乎並沒有接受任何其他的東西XMLConstants.FEATURE_SECURE_PROCESSING Impl Code

請指點我認爲我可能沒有經歷過的任何資源或對此問題可能的解決方案。

+0

我對Fortify並不熟悉,但是對於SAX解析器,您知道如何滿足Fortify的需求,在這種情況下,我想知道是否提供SAXSource而不是StreamSource,在SAX解析器中設置所有必需的功能, 。 –

+0

@MartinHonnen謝謝,讓我試試這個,並會回來。 –

+0

@RaviRanjan我有同樣的問題。你能解決你的問題嗎? –

回答

1
TransformerFactory trfactory = TransformerFactory.newInstance(); 
trfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); 

我覺得這樣就足夠了。

Fortify的建議如下功能,但那些不適合的TransformerFactory

actory.setFeature("http://xml.org/sax/features/external-general-entities", false); 
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); 

我們可能需要更改到一個不同的解析器使用它們的工作。

+0

謝謝,。這可能是需要'改變到一個不同的分析器使用它們。但指向一些可靠的分析器可能更多作爲答案很有幫助。 –