XSS(之所以簡寫為XSS而非CSS,主要是為了和層疊樣式表Cascading Style Sheets區分開)的英文全稱為Cross Site Scripting,是一種黑客向web頁面插入JS代碼以攻擊用戶的攻擊手段。
會被稱之為跨站腳本攻擊主要是來源於它的攻擊方式。
黑客利用網頁漏洞向網站插入HTML/JS代碼,當用戶訪問帶有JS代碼的網站時會執行這一段HTML/JS代碼,達到黑客的目的。
XSS分類
XSS(Cross-site scripting,跨站腳本攻擊) 是指利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行黑客惡意製造的網頁程序,這些惡意網頁程序通常是JavaScript,但實際上也可以包括Flash、ActiveX、Java甚至是普通HTML。比如破壞頁面結構、盜取用戶Cookie、重定向到其它網站等。
可以將XSS分為兩種類型:
持久型攻擊:持久型xss,會把攻擊者的數據存儲在伺服器端,攻擊行為將伴隨著攻擊數據一直存在。非持久型攻擊:顧名思義,非持久型XSS攻擊是一次性的,僅對當次的頁面訪問產生影響。非持久型XSS攻擊要求用戶訪問一個被攻擊者篡改後的連結,用戶訪問該連結時被植入的攻擊腳本被用戶瀏覽器執行,從而達到攻擊目的。IDC行業內一般把XSS分為三種:
1.Stored XSS存儲型攻擊(持久型):
Stored XSS又稱之為持久型跨站腳本攻擊,它的代碼是存儲在伺服器中的,比如在發表文章或個人信息等界面插入代碼;假如過濾失敗,這些代碼就會被存儲到伺服器中,在用戶訪問該頁面的時候觸發執行。存儲型XSS一般會出現在博客的日誌評論這種用戶交互的地方,容易盜竊Cookie、蠕蟲等。
Stored XSS的危害較反射型XSS大的原因便是因為持久,在頁面當中看不到這個Script代碼,只要管理員沒有發現就會一直被接踵而來的訪問點擊而觸發執行。
2.反射型 XSS(非持久型):
反射型XSS也叫做非持久型XSS,黑客在URL中插入XSS代碼,服務端將URL中的XSS代碼輸出到頁面上,攻擊者將帶有XSS代碼的URL發送給用戶,用戶打開後受到XSS攻擊。
這種攻擊一般容易出現在搜索頁面,與存儲型不同的是需要欺騙用戶自己去點擊連結才能觸發XSS代碼。
漏洞數據流向前端→後端→前端:
當用戶提交數據,輸入 < script>alert(『hack』)< /script> 代碼會提交給後臺,並彈出hack頁面,這就表示我們的惡意語句被頁面執行了。
3.DOM Based XSS:
DOM型的XSS是一些有安全意識的開發者弄出來的,比如接受參數會做一些過濾,把一些字符轉義一下,但是轉義之後依然會存在著XSS的情況。常見可觸發DOM-XSS的屬性包括:window.name、document.referer、documen.write、innerHTML、location等。
小科普:
什麼是DOM
DOM是指文檔對象模型(Document Object Model),是一個平臺中立和語言中立的接口,也是處理可擴展標記語言的標準編程接口,有的程序和腳本可以動態訪問和修改文檔的內容、結構和樣式。在Web開發領域的技術浪潮中,DOM是開發者能用來提升用戶體驗的最重要的技術之一,而且幾乎所有的現在瀏覽器都支持DOM。
什麼是DOM-XSS
DOM-XSS漏洞是基於文檔對象模型的一種漏洞,不經過後端。DOM-XSS是通過url傳入參數去控制觸發的,其實也屬於反射型XSS。
3w.a.com/xss/domxss.html代碼如下:
觸發方式為3w.a.com/xss/domxss.html#alert(1)
這個URL#後的內容是不會發送到伺服器端的,僅僅在客戶端被接收並解執行。
常見的輸入點有:
xhr請求回來的數據:
直接輸出html內容:
直接修改DOM樹(包括DHTML):
替換document URL:
打開或修改新窗口: