通常XSS攻擊分為:反射型xss攻擊, 存儲(chǔ)型xss攻擊 和 DOM型xss攻擊。同時(shí)注意以下例子只是簡(jiǎn)單的向你解釋這三種類型的攻擊方式而已,實(shí)際情況比這個(gè)復(fù)雜,具體可以再結(jié)合最后一節(jié)深入理解。
反射型xss攻擊?
反射型的攻擊需要用戶主動(dòng)的去訪問帶攻擊的鏈接,攻擊者可以通過郵件或者短信的形式,誘導(dǎo)受害者點(diǎn)開鏈接。如果攻擊者配合短鏈接URL,攻擊成功的概率會(huì)更高。
在一個(gè)反射型XSS攻擊中,惡意文本屬于受害者發(fā)送給網(wǎng)站的請(qǐng)求中的一部分。隨后網(wǎng)站又把惡意文本包含進(jìn)用于響應(yīng)用戶的返回頁面中,發(fā)還給用戶。
存儲(chǔ)型xss攻擊?
這種攻擊方式惡意代碼會(huì)被存儲(chǔ)在數(shù)據(jù)庫(kù)中,其他用戶在正常訪問的情況下,也有會(huì)被攻擊,影響的范圍比較大。
DOM型xss攻擊?
基于DOM的XSS攻擊是反射型攻擊的變種。服務(wù)器返回的頁面是正常的,只是我們?cè)陧撁鎴?zhí)行js的過程中,會(huì)把攻擊代碼植入到頁面中。
XSS 攻擊的防御?
XSS攻擊其實(shí)就是代碼的注入。用戶的輸入被編譯成惡意的程序代碼。所以,為了防范這一類代碼的注入,需要確保用戶輸入的安全性。對(duì)于攻擊驗(yàn)證,我們可以采用以下兩種措施:
1. 編碼,就是轉(zhuǎn)義用戶的輸入,把用戶的輸入解讀為數(shù)據(jù)而不是代碼
2. 校驗(yàn),對(duì)用戶的輸入及請(qǐng)求都進(jìn)行過濾檢查,如對(duì)特殊字符進(jìn)行過濾,設(shè)置輸入域的匹配規(guī)則等。
具體比如:
1. 對(duì)于驗(yàn)證輸入,我們既可以在服務(wù)端驗(yàn)證,也可以在客戶端驗(yàn)證
2. 對(duì)于持久性和反射型攻擊,服務(wù)端驗(yàn)證是必須的,服務(wù)端支持的任何語言都能夠做到
3. 對(duì)于基于DOM的XSS攻擊,驗(yàn)證輸入在客戶端必須執(zhí)行,因?yàn)閺姆?wù)端來說,所有發(fā)出的頁面內(nèi)容是正常的,只是在客戶端js代碼執(zhí)行的過程中才發(fā)生可攻擊
4. 但是對(duì)于各種攻擊方式,我們最好做到客戶端和服務(wù)端都進(jìn)行處理。
其它還有一些輔助措施,比如:
1. 入?yún)㈤L(zhǎng)度限制: 通過以上的案例我們不難發(fā)現(xiàn)xss攻擊要能達(dá)成往往需要較長(zhǎng)的字符串,因此對(duì)于一些可以預(yù)期的輸入可以通過限制長(zhǎng)度強(qiáng)制截?cái)鄟磉M(jìn)行防御。
2. 設(shè)置cookie httponly為true。