一.基本概念
? ? DOM的全稱為Document Object Model,即文檔對(duì)象模型跪削,DOM通常用于代表在HTML尔当、XHTML和XML中的對(duì)象 蹭沛。使用DOM可以允許程序和腳本動(dòng)態(tài)的訪問和更新文檔的內(nèi)容赂韵、結(jié)構(gòu)和樣式。
? ? 通過JavaScript可以重構(gòu)整個(gè)HTML頁(yè)面嫌蚤,而重構(gòu)頁(yè)面或者頁(yè)面中的某個(gè)對(duì)象辐益,JavaScript就需要知道HTML文檔中所有元素的“位置”。而DOM為文檔提供了結(jié)構(gòu)化表示搬葬,并定義了如何通過腳本來訪問文檔結(jié)構(gòu)荷腊。根據(jù)DOM規(guī)定艳悔,HTML文檔中的每一個(gè)成分都是一個(gè)節(jié)點(diǎn)急凰。
? ? DOM規(guī)定如下
? ? 1.每個(gè)HTML標(biāo)簽是一個(gè)元素節(jié)點(diǎn);
? ? 2.包含在HTML元素中的文本是文本節(jié)點(diǎn)猜年;
? ? 3.每一個(gè)HTML屬性是一個(gè)屬性節(jié)點(diǎn)抡锈;
? ? 4.節(jié)點(diǎn)與節(jié)點(diǎn)之間都有等級(jí)關(guān)系;
? ? HTML的標(biāo)簽都是一個(gè)個(gè)節(jié)點(diǎn)乔外,而這些節(jié)點(diǎn)組成了DOM的整體結(jié)構(gòu):節(jié)點(diǎn)樹床三,如下圖所示。
二.漏洞復(fù)現(xiàn)
? ? 所謂DOM型xss杨幼,指的就是服務(wù)器端處理數(shù)據(jù)階段Document()方法的跨站腳本撇簿,實(shí)現(xiàn)起來也比較簡(jiǎn)單聂渊,下面是一段比較簡(jiǎn)單的DOM型xss實(shí)例。
? <script>
? ? var temp = document.URL;? ? ? ? ? ? ? ? ? ? ? ? ? ? //獲取url
? ? var index = document.URL.indexOf("content=")+4;
? ? var par = temp.substring(index);
????document.write(decodeURI(par));? ? ? ? ? ? ? ? //輸入獲取內(nèi)容
?</script>
? ? 以上代碼的意思是獲取URL中content參數(shù)的值四瘫,并且輸出汉嗽,如果輸入 http://www.navi.org/dom.html?content=<script>alert(/xss/)</script>,就會(huì)產(chǎn)生xss漏洞。
三.漏洞威脅
? ? DOM型xss不像反射型xss與存儲(chǔ)型xss一樣會(huì)與后臺(tái)交互找蜜,只是在服務(wù)器處理數(shù)據(jù)階段反彈數(shù)據(jù)饼暑,因此屬于低危漏洞。