2012-08-07 68 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規範中刪除,但瀏覽器支持得很好。