我有一个XSLT样式表,用于处理XML文档以生成HTML。
我意识到可以以这样一种方式操纵网站,即用户可以提供他们喜欢的任何XML - 不幸的是,这是不可避免的,所以我希望通过确保保护自己免受XSS(和其他攻击)我的XSLT样式表能够安全地处理任何文档。
要达到这个目的,我需要注意什么?
更新
我知道默认情况下XSLT转义输出(可以使用disable-output-escaping
属性禁用) - 这是否足以阻止某人注入恶意HTML元素和属性?
答案 0 :(得分:2)
如果您正在处理来自不受信任来源的XML数据并在您的网站上显示结果,请始终记住它不受信任。
如果要将转换结果传递给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>
如果确实需要将数据传递给查询,请使用绑定变量。