在XSLT生成的内容中防止XSS(和其他攻击)

时间:2011-01-30 09:03:05

标签: security xslt xss

我有一个XSLT样式表,用于处理XML文档以生成HTML。

我意识到可以以这样一种方式操纵网站,即用户可以提供他们喜欢的任何XML - 不幸的是,这是不可避免的,所以我希望通过确保保护自己免受XSS(和其他攻击)我的XSLT样式表能够安全地处理任何文档。

要达到这个目的,我需要注意什么?

更新

我知道默认情况下XSLT转义输出(可以使用disable-output-escaping属性禁用) - 这是否足以阻止某人注入恶意HTML元素和属性?

1 个答案:

答案 0 :(得分:2)

如果您正在处理来自不受信任来源的XML数据并在您的网站上显示结果,请始终记住它不受信任。

  • 您永远不应该使用xsl:copy或xsl:copy-of。如果直接复制文本以外的节点,则可能会发生XSS攻击。
  • 您不应使用复杂或递归规则。特制的输入可以通过延迟XSLT处理或使处理器崩溃来创建DoS。
  • 另外,就像你提到的那样,不要禁用输出转义。

如果要将转换结果传递给SQL服务器,则不应将任何提供的数据放入SQL查询中。

例如,这是坏事:

<xsl:if test="@order">ORDER BY <xsl:value-of select="@order"/></xsl:test>

这很好:

<xsl:if test="@order">ORDER BY
    <xsl:chose><xsl:when test="@order = 'foo'">foo</xsl:when> [...] </xsl:chose>
</xsl:test>

如果确实需要将数据传递给查询,请使用绑定变量。