我允许客户在网站上共享xml文件,他们可以上传和下载文件。我使用php和simpleXML来解析文件但是现在不进行任何检查来验证文件,而不是:
if( ! $xml = simplexml_load_file('xml/'.$xml_file) ){
echo 'unable to load XML file';
// run redirect script and explain there was a problem with the XML file
}
我尝试谷歌搜索并无法真正找到明确的答案是,如果有人可以在XML中上传病毒。这听起来很遥远,但普遍的共识是任何文件都可能有病毒。我找不到任何关于他们如何在XML文件中植入病毒的信息,或者我可以做些什么来检查恶意代码。
我确切知道XML文件应该包含哪种格式,即哪些节点,我是否可以创建一个可接受的节点列表,如果它包含任何不接受拒绝文件的节点?
病毒是否植入节点中
<node ="<?php delete * from table where id > 0; ?>"
或类似的东西,这是否意味着病毒只有在互联网浏览器或应用程序中运行时才会启用?
所有xml文件用于存储将被解析以显示表的设置和表属性,xml文件通常具有表格中单元格的宽度和颜色等值和属性,它也将是在用C#编写的桌面应用程序中运行,几乎可以做同样的事情。
有没有办法逃避XML中的注入/病毒,或者是否有任何资源可以指向我可以阅读的内容。
答案 0 :(得分:2)
针对处理XML的系统存在一些通用攻击:
然后有人可能会针对特定的XML处理器。例如,只需查看CVEs filed against libxml2。
通常,您应该从外部源验证XML文件。大多数情况下,您需要禁止内部DTD子集,尤其是实体声明。可以使用DTD,XML Schema或RELAX NG轻松检查XML文件的结构。