首先我們需要了解DOM是什么
我們可以把DOM理解為一個一個訪問HTML的標准的編程接口。DOM是一個前端的接口,並沒有和后端做任何的交互。W3Cschool上有一個介紹DOM的樹形圖我把他截取下來了。
DOM型XSS漏洞演示
1.首先我們在輸入框中隨便輸入一串字符。可以看到彈出一個what do you see?的提示。我們查看一下源碼看到底做了一個什么樣的操作。代碼太長比較難找,Ctrl+F搜索一下what定位到源碼的相關位置。
可以看到這里有一段js的代碼,我們可以簡單分析一下這段代碼。以前我們接觸到的反射型和存儲型都是通過后台輸出,我們可以從源代碼中看到輸入點就是源碼中的input標簽,DOM型的XSS漏洞通過了解我們可以知道是純前端的漏洞,分析源碼可移知道我們輸入后得到一個字符串,然后通過字符串拼接的方式拼接到a href中。輸出點我們可以從<a>標簽構造一個閉包函數。
2.構造一個閉包函數輸入到文本框中去。我們實際上是使前面的a標簽進行閉合操作,然后在完整的a標簽中加入了一個警告框。其實這種DOM注入沒有什么太大的用處,因為既沒有發送到后台進行操作,也沒有輸入到URL中去。
3.我們可以看一下后面的那種DOM型。我們將前面的文本框中構造的閉合a標簽的代碼重新輸入到下面的DOM型中去。(#'onclick="alert(111)")可以看到也正常彈出了警告框,我們查看一下網絡源碼發現這個DOM型是獲取了瀏覽器URL中的參數,所以這就可以與我們的URL參數相關聯構造出一個惡意的URL與反射型XSS就有一些相似了。