0
我正在保護軟件免受XML擴展攻擊,我想通過XMLReader運行存儲爲字節數組的文件,以測試擴展循環。從字節數組中簡單地創建一個字符串是安全的嗎,還是將我的軟件打開到可能的漏洞的全新區域?是否將表示文件的字節數組轉換爲java中的字符串存在安全風險?
String xml = new String (myByteArray);
我正在保護軟件免受XML擴展攻擊,我想通過XMLReader運行存儲爲字節數組的文件,以測試擴展循環。從字節數組中簡單地創建一個字符串是安全的嗎,還是將我的軟件打開到可能的漏洞的全新區域?是否將表示文件的字節數組轉換爲java中的字符串存在安全風險?
String xml = new String (myByteArray);
感謝所有的評論。
由於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);
}
由於它是不安全的獲得使用Java密碼作爲一個'String'(這是推薦使用'的char []'代替),如果你願意,我* *疑同樣將適用於此.. –
要在字符串中存儲字節數組,您必須使用正確的編碼,例如BASE64編碼。並非所有字節都與字符對應,所以您將丟失數據(在java中,String是UTF-16,與C String不同)! – zenbeni
「從字節數組中簡單創建一個字符串是否安全?」這樣做絕不是一個好主意,因爲您假定字節是默認的字符編碼。這個假設可能是錯誤的。但是*安全*風險:本身不是。 – Raedwald