Web安全——XSS指令碼注入攻擊
阿新 • • 發佈:2019-02-15
好久不發文章,我表示…我還活著。
只不過最近在寫Git-books,所以忽略了我的這個部落格。這兩天在看Web安全相關的東西,覺得確實有意思。
XSS跨站指令碼攻擊
XSS 意為跨站指令碼攻擊(Cross Site Scripting),縮寫應該是CSS,但是已經有了一個層疊樣式表(Cascading Style Sheets),所以就叫它XSS了。惡意攻擊者往Web頁面裡插入惡意Script程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的Script程式碼會被執行,從而達到惡意攻擊使用者的目的,最常見的就是拿到攻擊者的 Cookie 然後就可以登入別人的賬號了。
清單 1. 存在 DOM based XSS 的 HTML 程式碼
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>
按照該頁面 JavaScript 程式碼邏輯,它會接受 URL 中傳入的 name 引數並展示歡迎資訊,如清單 2 所示:
清單 2. 正常情況下的訪問 URL
http://www.vulnerable.site/welcome.html?name=Jeremy
清單 3. 訪問 URL 中注入指令碼
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
值得關注的是,通過以上示例可以看出,惡意程式碼不需要嵌入伺服器的響應中,基於 DOM 的跨站點指令碼編制攻擊也能成功。可能某些讀者會認為:目前主流瀏覽器會自動轉義 URL 中的 ‘<’ 和 ‘>’ 符號,轉義後的注入指令碼就不會被執行了,基於 DOM 的跨站點指令碼編制也就不再有什麼威脅了。這句話前半段是對的,但後半段就不準確了。我們要意識到攻擊者可以很輕鬆地繞過瀏覽器對 URL 的轉義,譬如攻擊者可以利用錨點 ‘#’ 來欺騙瀏覽器,如清單 4 所示。瀏覽器會認為 ‘#’ 後面的都是片段資訊,將不會做任何處理。
http://www.vulnerable.site/welcome.html#?name=<script>alert(document.cookie)</script>
測試:
chrome可以攔截XSS:
IE不行