【问题标题】:How to restrict an ENTITY tag in xml file using xsd如何使用 xsd 限制 xml 文件中的实体标记
【发布时间】:2016-09-21 09:13:41
【问题描述】:

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

【问题讨论】:

    标签: java xml security xsd xom


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您提供此信息。请为这种情况提出一些解决方案。
    【解决方案2】:

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

    所以我想阻止外部实体。

    如果您的意思是要防止外部实体被注入到您的 XML 中,那么我们可能无法帮助您,因为我们和您可能都无法控制注入它的安全扫描。

    如果您的意思是要防止实体引用被扩展,请意识到 XML 解析器应该扩展实体引用并且通常无法覆盖此行为。 @innovimax (+1) 已经证明 XOM 没有。请参阅 here 了解在高级已知实体引用时 XSLT 中的 hack。

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

    【讨论】:

    • 请注意,解析内联 DTD 会导致安全漏洞,例如 XXE 或“十亿笑”(参见owasp.org/index.php/XML_External_Entity_(XXE)_Processing),安全最佳实践是禁用内联 DTD 处理,因为攻击者可以将他的 DTD 添加到从用户输入处理的任何 XML 中。
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多