2014-01-09 25 views
0

我正在保護軟件免受XML擴展攻擊,我想通過XMLReader運行存儲爲字節數組的文件,以測試擴展循環。從字節數組中簡單地創建一個字符串是安全的嗎,還是將我的軟件打開到可能的漏洞的全新區域?是否將表示文件的字節數組轉換爲java中的字符串存在安全風險?

String xml = new String (myByteArray); 
+0

由於它是不安全的獲得使用Java密碼作爲一個'String'(這是推薦使用'的char []'代替),如果你願意,我* *疑同樣將適用於此.. –

+0

要在字符串中存儲字節數組,您必須使用正確的編碼,例如BASE64編碼。並非所有字節都與字符對應,所以您將丟失數據(在java中,String是UTF-16,與C String不同)! – zenbeni

+0

「從字節數組中簡單創建一個字符串是否安全?」這樣做絕不是一個好主意,因爲您假定字節是默認的字符編碼。這個假設可能是錯誤的。但是*安全*風險:本身不是。 – Raedwald

回答

0

感謝所有的評論。

由於Raedwald指出,它不一定是安全問題,但將byte []轉換爲String時可能會丟失數據。

我發現這種方法工作,它似乎是安全的。通過這段代碼,一個SAXParseException將在100,000次擴展時拋出。使用安全管理器或設置系統屬性或在運行時使用-DentityExpansionLimit = | number |可以減少此限制。

InputStream textReader = new ByteArrayInputStream (myByteArray); 
SAXParserFactory parserFactory = SAXParserFactory.newInstance(); 
try { 
     XMLReader reader = parserFactory.newSAXParser().getXMLReader(); 
     reader.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 
     InputSource inputSource = new InputSource(textReader); 
     reader.parse(inputSource); 
} 
相關問題