儲存型XSS(stored xss/persistent xss)的攻擊方式是讓JavaScript存在該網站的資料庫當中。通常發生在論壇、無名小站這類型會有留言版的網站。當你瀏覽該網站的時候,網站會讀取留言板的內容,同時間儲存在資料庫的惡意程式碼就會被執行。
在XSS類型的攻擊手法中,是最為危險的一種。為什麼呢?因為不像昨天提到的反射型XSS,它不需要你去點擊具有惡意程式碼的網址。
XSS攻擊的著名事件,一定得提到2005年MySpace的薩米蠕蟲。一開始薩米僅僅是想測試有沒有方法可以騙過MySpace做出不允許用戶做出的行為,像是原本只允許用戶上傳至多12張相片,後面他也成功上傳13張相片。在這之後薩米為了增加自己與女友在網站的「關係」條目,再次騙過了MySpace新增了熱戀中。這時候他意識到自己可以在這網站中為所欲為。
後面一個禮拜薩米寫出了能夠自我複製的電腦蠕蟲,當有訪問者訪問他的MySpace頁面的時候就會自動感染,並將病毒也複製到他們自己的MySpace主頁。它會讓受害者自動對薩米發動好友申請,並且修改自己主頁並留下「but most of all, samy is my hero」的字串。
這起事件重要的原因在於它某種意義上開啟了XSS攻擊隱患的注意,當時約有8至9成的網頁都容易受到類似的攻擊。畢竟如果薩米有那個企圖的話,他甚至可以盜取所有人的資料。
在檢測一個網站的時候,一般都是用alert的彈框看看存不存在XSS漏洞:
<script>alert(1)</script>
要防止XSS的存在或是阻止XSS的執行也有多種方法比如
特殊字元做escape
將<
做escape變成%lt
,這樣就不會被當成html的標籤來做解析
CSP (Content-Security-Policy)
以下是來自Microsoft網站的解釋
內容安全性原則 (CSP) 是額外的安全性層,協助偵測和緩解某些類型的網路攻擊,例如資料竊取、網站篡改或惡意軟體的分發。 CSP 提供一組廣泛的原則指令,可協助您控制允許載入網站頁面的資源。 每個指令都會定義特定資源類型的限制。
簡單來說就是告訴瀏覽器那些外部資源是可以下載哪些不可以,類似白名單的機制
參考資料
儲存型XSS的攻防:不想做開發的黑客不是好黑客
淺談 XSS 攻擊與防禦的各個環節
管理您網站的內容安全性原則
科技: 徹底改變了網際網路的 MYSPACE 蠕蟲病毒
The MySpace Worm that Changed the Internet Forever