Sle*_*led 2 html xml xhtml cdata
我正在写一份关于 HTML 中的 XML 注入攻击的报告。因此,我将拥有(损坏的)HTML 内容作为我的 HTML 的内容。因此,我试图将我的 HTML 内容包装在 CDATA 块中,但它似乎确实呈现正确。
我有(由 W3C 验证)文档:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>report</title>
    </head>
    <body>
        <div><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">]]></div>
    </body>
</html>
根据我对维基百科文章的理解,这意味着内容应该“标记为解析器仅将其解释为字符数据,而不是标记”。所以输出应该是
AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
然而,在两者Chrome 21.0.1180.60 m和Firefox 14.0.1所有呈现的是
]]>
到底是怎么回事?不应该从第一个<![CDATA[到第一个的所有内容都]]>出现在屏幕上,就好像每个字符都已被转义一样?
CDATA 部分只能在 XML 解析模式下被浏览器识别。如您所见,在旧版 HTML 模式下,会发生奇怪的事情。
因此,您需要配置服务器以发送带有 XHTML Content-Type 的文档。这反过来会阻止旧版本的 IE(直到 IE 8)根本不呈现文档。
将 HTML 标记显示为 HTML 文档内容的实用方法是: a) 将每个显示<为<和每个都显示&为&。适用于旧版 HTML 和 XHTML。b) 将数据包装在一个xmp元素中。在遗留 HTML 中工作(仅 - 所以没有 XML Content-Type,但只是声明 XHTML doctype 无关紧要,无论如何它都会被忽略)。例子:
<xmp><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">]]></xmp>
xmp标记还暗示了等宽字体和类似pre的渲染,其中空格受到尊重。但是这些可以用 CSS 覆盖。该xmp元素很久以前就从 HTML 规范中删除了,但浏览器支持得很好。
| 归档时间: | 
 | 
| 查看次数: | 3914 次 | 
| 最近记录: |