如何使用xsd限制xml文件中的ENTITY标记

时间:2016-09-21 09:13:41

标签: java xml security xsd xom

我的xml代码如下:

  <request><param name=\"client-id\" value=\"organization\"/><param name=\"client-org-id\" value=\"3042d80e24cd4cc31eb9ef48e7012\"/><param name=\"user-agent\" value=\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0\"/><param name=\"client-browser\" value=\"Firefox 48\"/><param name=\"domain-id\" value=\"layout\"/><param name=\"view-id\" value=\"1\"/><param name=\"view-token\" value=\"layout|get-workspace|\"/><param name=\"view-action\" value=\"private.layout:get-workspace\"/><param name=\"view-parent-id\" value=\"\"/><param name=\"view-parent-token\" value=\"\"/><param name=\"view-parent-action\" value=\"\"/></request>

这里我将上面的xml作为字符串,我使用XOM解析器来解析xml。现在我的问题是我的应用程序经历了安全扫描,我获取XML字符串的参数是注入外部XML,如下所示:

<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE acunetix [><!ENTITY acunetixent SYSTEM \"http://hitrlWBrzWDQ0.bxss.me/\">]><xxx>&acunetixent;</xxx>

所以我想阻止外部实体。什么是最好的解决方案。或者在使用xsd解析XML时避免使用xml中的ENTITY标记的任何解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我担心你不能在XOM中做到这一点

http://www.xom.nu/infoset.xhtml中,您可以阅读

  

扩展所有实体引用。 XOM不允许未展开的实体引用。

答案 1 :(得分:0)

首先,您在 XML中发布的内容。您必须删除双引号字符\之前的所有反斜杠"字符,以便您发布的内容格式正确。

  

所以我想阻止外部实体。

如果这意味着您想要阻止外部实体被注入您的XML,那么我们可能无法帮助您,因为我们和您都无法控制注入它的安全扫描

如果这意味着您要阻止实体引用被扩展,请认识到XML解析器假设以扩展实体引用,并且通常无法覆盖此行为。 @innovimax(+1)已经证明XOM没有。当高级已知实体引用时,请参阅here了解XSLT中的hack。

最后请注意,在您的请求的任何一种解释中,XSD都不起作用。