2012-08-07 73 views
2

我正在写HTML报告关于XML注入攻击。因此,我将(HTML)内容作为HTML的内容。因此,我试图将我的HTML内容封装在CDATA块中,但似乎确实正在渲染。为什么我的HTML中的CDATA部分没有渲染?

我有(validated by 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=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;">]]></div> 
    </body> 
</html> 

从我的Wikipedia article这个的理解意味着内容应该是“标记为解析器来解释,因为只有字符数据,而不是标记”。所以输出应该是

AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;"> 

然而,在这两个Chrome 21.0.1180.60 mFirefox 14.0.1都呈现为

]]> 

这是怎么回事?屏幕上不应该显示从<![CDATA[到第一个]]>的所有内容,就好像每个角色都已经逃脱一样?

+1

可能重复http://stackoverflow.com/questions/3880644/how-to-use-cdata-in-html-documents – sundar 2012-08-07 17:34:23

回答

4

只有在XML解析模式下,浏览器才能识别CDATA节。在传统的HTML模式中,奇怪的事情发生了,就像你看到的那样。

因此,您需要配置服务器以使用XHTML Content-Type发送文档。这反过来会阻止旧版本的IE(高达IE 8)根本不呈现文档。

显示HTML标记为HTML文档的内容的实用方法是: 一)目前各<&lt;每个&&amp;。在XHTML中使用传统的HTML和HTML。 b)将数据包装在xmp元素中。在传统HTML中工作(仅限于 - 不包含XML Content-Type,但只声明XHTML文档类型无关紧要,无论如何都会被忽略)。例如:

<xmp><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=&lt;SCRIPT&gt;alert('XSS')&lt;/SCRIPT&gt;">]]></xmp> 

xmp标记也意味着宽字体和pre样渲染这里的空白被兑现。但是这些可以被CSS覆盖。 xmp元素早已从HTML规范中删除,但浏览器支持得很好。

相关问题