使用XMLEncoder
和XMLDecoder
將Java Beans序列化爲XML似乎是一個非常簡潔的方法:許多來源的許多類都可以可靠地序列化,只需使用它們的公共接口即可。在API參考的許多地方甚至建議使用這種方法進行序列化。但用於此的XML syntax似乎相當強大。是否有任何安全機制可以防止來自惡意文檔的攻擊?還是應該出於安全原因避免在不受信任的文檔上使用XMLDecoder
?使用XMLDecoder讀取文檔文件是否安全?
5
A
回答
9
XML序列化bean的反序列化可能導致JVM可以執行的任何操作。爲了給你一個醜陋的examle說,可以考慮提出以下文件,它會寫一個特定的文件,沒有任何問題:
<?xml version="1.0" encoding="UTF-8" ?>
<java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>/tmp/Hacked.txt</string>
<void method="println">
<string>You have been hacked!</string>
</void>
<void method="close"/>
</object>
</java>
這是大致相同的方法
PrintWriter deserialize() {
PrintWriter obj = new PrintWriter("/tmp/Hacked.txt");
obj.println("You have been hacked!");
obj.close();
return obj;
}
出於這個原因,我強烈建議針對只使用XMLDecoder
從不受信任的來源讀取數據。
要麼將文檔驗證爲XML語言的定義良好且無害的子集,要麼將自己的格式與jaxb等技術一起使用。或者在嚴格控制的環境中執行反序列化,安全管理人員將不允許任何意外操作。
3
不,它絕對不安全使用。
示例MvG提供(在接受的答案中)不繪製完整圖片。
看看我的Using XMLDecoder to execute server-side Java Code on an Restlet application (i.e. Remote Command Execution)博客中寫道的例子,我展示瞭如何:
- 啓動進程,
- 上傳類文件,
- 寫入到服務器端的HTML的OutputStream,
- 創建XSS和
- 觸發遠程外殼
全部來自由XMLDecoder解析的XML文件/字符串(以及在博客文章中顯示的示例中,通過Restlet的REST API ObjectRepresentation類)
相關問題
- 1. PHP讀取安全文件
- 2. 遍歷(讀取)靜態DOM文檔對象是否線程安全?
- 3. 是否可以使用exiftool獲得PDF文檔安全
- 4. Symfony2安全組件文檔
- 5. 是否有.NET API來讀取XML註釋文檔文件
- 6. TFS安全和文檔文件夾
- 7. Laravel 5安全上傳文檔文件
- 8. 使用「is_numeric」安全地讀取僅包含零(「0」)的文件?
- 9. 使用FileChannel讀取Android資產文件安全嗎?
- 10. 如何使用webhdfs從安全節點讀取hdfs文件?
- 11. 刪除「InetPub」文件夾是否安全?
- 12. 編輯Android SDK文件是否安全?
- 13. 文檔_id是否可安全地用作URL中的參數?
- 14. PDF文檔安全與文檔限制
- 15. 是否可以使用Perl讀取pdf文件中的文本?
- 16. 使用Realm作爲安全的文件存儲和文件讀取器
- 17. HTML5文件API:安全性錯誤時讀取文件
- 18. 使用BufferedStream封裝NetworkStream進行異步讀取是否安全?
- 19. 使用.htaccess安全文件
- 20. 打開不安全文件時,PyPDF2是否採取任何安全措施?
- 21. 文件未完全讀取
- 22. 是否讀取只讀文件鎖定文件
- 23. 用文本編輯器打開加密文件是否安全
- 24. Logstash正在讀取文件/文檔
- 25. 從文檔庫sharepoint讀取xsl文件
- 26. 使用NSFileManager API處理iCloud中的文件是否安全?
- 27. 讀取XML文檔
- 28. XPS文檔有多安全?
- 29. LibreOffice文檔爲PDF安全
- 30. 使用jsfl腳本讀取FLA文件的文檔類屬性
確實。 Java編程語言當前安全編碼指南的準則3-8「JavaBeans組件的長期持久性支持執行Java語句」。 http://www.oracle.com/technetwork/java/seccodeguide-139067.html#3-8 –