DOM型XSS常用知識點整理

目錄

1.DOM基礎

2.常用的DOM對象

3.常用的DOM方法

4.常用的DOM屬性

5.DOM型XSS流程

1.DOM基礎

HTML的標籤都是節點,而這些節點組成了DOM的整體結構---節點樹。

DOM的規定如下:整個文檔是一個文檔節點;每個HTML標籤是一個元素節點;包含在HTML元素中的文本是文本節點;每一個HTML屬性是一個屬性節點;註釋是註釋節點;節點與節點之間都有等級關係。

通過HTML DOM,樹種所有的節點均可通過JavaScript代碼進行訪問。所有HTML元素(節點)均可被修改,也可以創建或刪除節點。在網站頁面中有許多元素,當頁面到達瀏覽器時,瀏覽器會爲頁面創建一個頂級的Document object文檔對象,接着生成各個子文檔對象,每個頁面元素對應一個文檔對象。每個文檔對象包含屬性、方法和事件。可以通過JS腳本對文檔對象進行編輯,從而修改頁面的元素。客戶端的腳本程序可以通過DOM動態修改頁面內容,從客戶端獲取DOM中的數據並在本地執行。由於DOM是在客戶端修改節點的,所以基於DOM型XSS漏洞不需要與服務器交互。

 

2.常用的DOM對象

document對象: document是一個文檔對象,代表給定瀏覽器窗口中的HTML文檔。使用document對象可以對HTML文檔進行檢查、修改或添加內容,並處理該文檔的內部事件。document.write可以在文檔流中寫入字符串。所以可以寫入標籤以及js代碼。

 

windows對象: windows是一個窗口對象,表示瀏覽器中打開的窗口。一個窗口下面可以有多個文檔對象。所以一個窗口下面只能有一個window.location.href,但是可以有多個document.URL,document.location.href。window是一個頂層對象,而不是另一個對象的屬性即瀏覽器的窗口。瀏覽器會爲HTML文檔創建一個window對象,併爲每個框架創建一個額外的window對象。document對象是window對象和frame對象的一個屬性,是顯示與窗口或框架內的一個文檔。document只是屬於window的一個子對象。Window.location包含href屬性,直接取值賦值相當於window.location.href(當前頁面完整URL)。document.URL取值時等價於window.location.href或者document.location.href。在某些瀏覽器中通過對docum.URL賦值來實現頁面跳轉,但是某些瀏覽器中不行。

 

element對象: element對象表示html元素。element對象可以擁有類型爲元素節點、文本節點、註釋節點的子節點。

 

attribute對象: attr對象表示html屬性。 NameNodeMap對象百世元素屬性節點的無序集合。

 

3.常用的DOM方法

getElementById():返回帶有指定ID的元素。 getElementByTagName():返回包含帶有指定標籤名稱的所有元素的節點列表。 getElementByClassName():返回包含帶有指定類名的所有元素的節點列表。 appendChild():把新的子節點添加到指定節點。 removeChild():刪除子節點。 replaceChild():替換子節點。 insertBefore():在指定的子節點前面插入新的子節點。 createAttribute():創建屬性節點。 createElement():創建元素節點。 createTextNode():創建文本節點。 getAttribute():返回指定的屬性值。 setAttribute():把指定屬性設置或修改爲指定的值。

4.常用的DOM屬性

nodeName屬性:規定節點的名稱。 這個屬性是隻讀的。 元素節點的nodeName返回標籤名。屬性節點的nodeName返回屬性名。文本節點的nodeName始終是#text。文檔節點的nodeName始終是#document。 例如:document.body.nodeName 返回body元素的名稱。

nodeValue屬性:規定節點的值。 元素節點的nodeValue是undefined或null。文本節點的nodeValue是文本本身。屬性節點的nodeValue是屬性值。

nodeType屬性:返回節點的類型。 nodeType是隻讀的。

innerHTML屬性:獲取元素內容。 innerHTML可以被賦值,也可讀,因此是被引用次數最多的對象屬性,同時也是最容易產生安全問題的對象屬性。

JS通常會調用DOM內置對象location來獲得用戶的輸入。常用的location對象的屬性如下: hash:從 # 開始的URL。 host:主機名和當前URL的端口號。 hostname:當前URL的主機名。 port:當前URL的端口號。 href:完整的URL。 pathname:當前URL的路徑部分。 protocol:當前URL的協議。 search:從 ? 開始的URL部分。

 

5.DOM型XSS流程

1.用戶輸入一個帶有參數的URL,在前端用js處理這個URL獲取其中的參數,接着通過DOM調用參數調整頁面中的節點,比如添加一個節點之類的,然後通過DOM輸出到頁面上。

2.用戶輸入一個帶有參數的URL,後端處理這個參數,把參數存入數據庫,然後通過json格式返回參數到頁面,通過dom調用參數調整頁面中的節點,通過dom輸出到頁面上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章