Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用XMLDecoder读取文档文件安全吗?_Java_Security_Xml Serialization_Javabeans_Xml Deserialization_Jaxb - Fatal编程技术网

Java 使用XMLDecoder读取文档文件安全吗?

Java 使用XMLDecoder读取文档文件安全吗?,java,security,xml-serialization,javabeans,xml-deserialization,jaxb,Java,Security,Xml Serialization,Javabeans,Xml Deserialization,Jaxb,使用and将JavaBean序列化为XML似乎是一种非常简洁的方法:来自许多源的许多类都可以可靠地序列化,只需使用它们的公共接口即可。在API参考的许多地方甚至建议使用这种方法进行序列化。但是,用于此的功能似乎相当强大。是否有任何安全机制可以防止来自恶意文档的攻击?或者,出于安全原因,是否应该避免在不受信任的文档上使用xmldecorder?XML序列化bean的反序列化可能会导致JVM可以执行的任何操作。给你一个丑陋的例子,考虑下面的文件,它将写一个没有任何问题的文件: /tmp/Hacke

使用and将JavaBean序列化为XML似乎是一种非常简洁的方法:来自许多源的许多类都可以可靠地序列化,只需使用它们的公共接口即可。在API参考的许多地方甚至建议使用这种方法进行序列化。但是,用于此的功能似乎相当强大。是否有任何安全机制可以防止来自恶意文档的攻击?或者,出于安全原因,是否应该避免在不受信任的文档上使用
xmldecorder

XML序列化bean的反序列化可能会导致JVM可以执行的任何操作。给你一个丑陋的例子,考虑下面的文件,它将写一个没有任何问题的文件:


/tmp/Hacked.txt
你被黑了!
这与方法大致相同

PrintWriter反序列化(){
PrintWriter obj=新的PrintWriter(“/tmp/Hacked.txt”);
println(“你被黑了!”);
obj.close();
返回obj;
}
因此,我强烈建议不要简单地使用
xmldecorder
从不受信任的来源读取数据


要么将文档验证为定义良好且无害的XML语言子集,要么将您自己的格式与以下技术结合使用,例如。或者在严格控制的环境中执行反序列化,安全管理器将禁止任何意外操作。

不,使用它绝对不安全

MvG提供的示例(在接受的答案中)并没有描绘出完整的画面

看一看我在博客上写的例子,我在这里展示了如何:

  • 启动进程
  • 上传类文件
  • 写入服务器端HTML输出流
  • 创建XSS和
  • 触发远程shell

所有这些都来自XMLDecoder解析的XML文件/字符串(在博客文章中显示的示例中,通过Restlet的RESTAPI对象表示类)

。Java编程语言当前安全编码准则的准则3-8“JavaBeans组件的长期持久性支持Java语句的执行。”@MvG,有没有办法从上述示例中的任意对象生成xml转储?我尝试使用XMLEncoder/XStream,但无法获得与deserialize()实现完全相同的sytax xml。对我来说,我的回答演示了任意代码执行,而您描述的所有其他方面都只是这方面的症状。但我想并不是每个人都可以建立这种连接,尤其是与服务器进程的连接,所以最好明确地说明这一点。找到了一个易受攻击的框架后,这一点变得更加具体。关于这件事你联系过Restlet开发者吗?