2013年8月21號(hào)第二屆KCon Web安然會(huì)議在北京金臺(tái)飯店進(jìn)行。KCon Web安然大年夜會(huì)是一個(gè)交換前沿、邊緣、主流的Web安然手藝、技能、案例的開(kāi)放安然會(huì)議,在第一屆KCon Web安然大年夜會(huì)上天融信阿爾法嘗試室研究人員就做了關(guān)于瀏覽器上的安然議題演講《瀏覽器魔術(shù)》。本屆大年夜會(huì)有各個(gè)行業(yè)安然圈人士500人參加插手,遠(yuǎn)遠(yuǎn)超于預(yù)期的300人范圍。大年夜會(huì)上天融信阿爾法嘗試室張晨做了《Having Fun with XML Hacking》議題演講,內(nèi)容很是超卓。本文把演講的內(nèi)容略加清算,與大年夜家分享。
XML的全稱(chēng)是eXtensible Markup Language,意思是可擴(kuò)大的標(biāo)識(shí)表記標(biāo)幟說(shuō)話,它是尺度通用標(biāo)識(shí)表記標(biāo)幟說(shuō)話(Standard Generalized Markup Language,SGML)的一個(gè)子集。
在80年代初期,IBM提出在各文檔之間共享一些類(lèi)似的屬性,例如字體大年夜小和版面。IBM設(shè)計(jì)了一種文檔系統(tǒng),經(jīng)由過(guò)程在文檔中添加標(biāo)識(shí)表記標(biāo)幟,來(lái)標(biāo)識(shí)文檔中的各類(lèi)元素,IBM把這類(lèi)標(biāo)識(shí)說(shuō)話稱(chēng)作通用標(biāo)識(shí)表記標(biāo)幟說(shuō)話(Standard Generalized Markup Language,SGML),即GML。顛末若干年的成長(zhǎng),1984年國(guó)際尺度化禁止(ISO)開(kāi)端對(duì)此提案進(jìn)行會(huì)商,并于1986年正式發(fā)布了為生成尺度化文檔而定義的標(biāo)識(shí)表記標(biāo)幟說(shuō)話尺度(ISO 8879),稱(chēng)為新的說(shuō)話SGML,即尺度通用標(biāo)識(shí)表記標(biāo)幟說(shuō)話。
一個(gè)簡(jiǎn)單的XML文件示例,一個(gè)XML文件由XML聲明、文檔類(lèi)型定義和文檔元素構(gòu)成。

那么甚么是文檔類(lèi)型定義呢?文檔類(lèi)型定義,也叫DTD(Document Type Definition),可定義合法的XML文檔構(gòu)建模塊。它利用一系列合法的元夙來(lái)定義文檔的布局,DTD 可被成行地聲明于 XML 文檔中,也可作為一個(gè)外部援引。
DTD文檔的聲明及援引
內(nèi)部DTD文檔
<!DOCTYPE 根元素 [定義內(nèi)容]>
外部DTD文檔
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
表里部DTD文檔連絡(luò)
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑" [
定義內(nèi)容
-]>
XML被設(shè)計(jì)用來(lái)存儲(chǔ)和傳輸數(shù)據(jù),任何平臺(tái)上的法度都可以經(jīng)由過(guò)程利用XML解析器來(lái)措置XML數(shù)據(jù),XML的利用范圍很是遍及,不但僅是web利用,還包含數(shù)據(jù)庫(kù)軟件、瀏覽器等等。既然XML的籠蓋面這么廣,那么假定呈現(xiàn)安然標(biāo)題問(wèn)題也是相當(dāng)可駭?shù)?。并且良多軟件都是利用的統(tǒng)一款XML解析庫(kù),假定這套解析庫(kù)存在縫隙,那么無(wú)疑又將影響的范圍擴(kuò)大年夜了。下面這張圖很清晰的描述了法度在措置XML時(shí)等閑呈現(xiàn)標(biāo)題問(wèn)題標(biāo)點(diǎn),我們慢慢來(lái)看:利用先將原始數(shù)據(jù)交給XML生成器,生成XML數(shù)據(jù),然后將生成后的XML數(shù)據(jù)提交到web辦事器,web辦事器領(lǐng)遭到XML數(shù)據(jù)后,將XML數(shù)據(jù)交給XML解析器,由XML解析器完成對(duì)XML數(shù)據(jù)的解析后把數(shù)據(jù)再返回給利用。在全部數(shù)據(jù)措置流程中,XML生成器和XML解析器這兩個(gè)點(diǎn)是最等閑呈現(xiàn)標(biāo)題問(wèn)題標(biāo)。

在XML解析的過(guò)程中,最多見(jiàn)的有三種縫隙:
拒盡辦事縫隙
XML注進(jìn)
XML外部實(shí)體注進(jìn)