【问题标题】:Will Firefox do XSLT on external entities?Firefox 会在外部实体上执行 XSLT 吗?
【发布时间】:2009-10-03 03:58:19
【问题描述】:

我想要做的是获取一个 XML 文档,比如http://example.org/data.xml,并使用 XSL 样式表显示它。 (我无法修改文档本身并添加指令)

所以有几个像这样的实用 XML 文件:

包装器.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
  <!ENTITY content SYSTEM "http://example.org/data.xml">
]>
<?xml-stylesheet type="text/xsl" href="unwrap.xsl" ?>
<wrapper>
  &content;
</wrapper>

unwrap.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="stylesheet.xsl"/>

  <xsl:template match="/wrapper/node()[1]">
    <xsl:apply-imports/>
  </xsl:template>
</xsl:stylesheet>

总结一下:stylesheet.xsl 是为http://example.org/data.xml 编写的,浏览器指向 wrapper.xml,用户应该会看到转换后的http://example.org/data.xml

这是在 IE(和 Chrome)中按预期运行但在 Firefox 中无法正常运行的极少数情况之一。

AFAIK Firefox 支持外部 XML 实体,但它们似乎在 XSL 代码中不可见。我从 2006 年发现 this article,它在 Firefox 1.5 中描述了这个问题(我使用的是 3.5.3)

有什么解决方法吗?

【问题讨论】:

    标签: firefox xslt entity doctype


    【解决方案1】:

    That XML looks familiar ;)

    目前,出于安全和拒绝服务问题,FireFox 不会加载外部 DTD 和实体引用。 例如:http://en.wikipedia.org/wiki/Billion_laughs

    有一个公开的Mozilla bug 描述了原因和关于是否使其成为可配置的东西的冗长辩论:https://bugzilla.mozilla.org/show_bug.cgi?id=22942

    There does appear to be one workaround to loading DTDs但我猜这对你来说可能不是一个可行的解决方案

    Firefox 将加载 本地 DTD 文件

    如果您将它们放在 Windows 的此目录中:

    C:\Program Files\Mozilla Firefox\res\dtd\...
    

    Linux 的目录:

    /**mileage may vary**/MozillaFirefox/lib/res/dtd/
    

    使用实体引用的一个想法: 如果您可以控制 wrapper.xml 的内容,那么您可以获取 http://example.org/data.xml(服务器端)的内容并将其作为包装文件的全部内容回显,并添加样式表处理指令(假设您有一些动态的服务器端功能)。

    【讨论】:

    • 我也刚刚意识到浏览器不会获取当前文档域之外的 XML 文档。因此,除非 wrapper.xml 也托管在 example.org 上,否则我无法告诉它获取 example.org/data.xml。但在那种情况下,我可能无论如何都可以修改 data.xml ;)这里的意图是让客户端完成所有工作,服务器也将使用每个请求的恒定带宽。我认为这将是一个巧妙的黑客攻击,但可惜的是,安全部门掌握了这一轮的王牌。 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多