XSS分為三類(lèi):
-
反射型XSS(非持久型)發(fā)出請(qǐng)求時(shí),XSS代碼出現(xiàn)在URL中,作為輸入提交到服務(wù)器端,服務(wù)器端解析后響應(yīng),XSS代碼隨響應(yīng)內(nèi)容一起傳回給瀏覽器,最后瀏覽器解析執(zhí)行XSS代碼。這個(gè)過(guò)程像一次反射,故叫反射型XSS。
-
存儲(chǔ)型XSS(持久型)存儲(chǔ)型XSS和反射型XSS的差別僅在于,提交的代碼會(huì)存儲(chǔ)在服務(wù)器端(數(shù)據(jù)庫(kù),內(nèi)存,文件系統(tǒng)等),下次請(qǐng)求目標(biāo)頁(yè)面時(shí)不用再提交XSS代碼。
-
DOM XSS(客戶(hù)端)DOM XSS和反射型XSS、存儲(chǔ)型XSS的差別在于DOM XSS的代碼并不需要服務(wù)器參與,觸發(fā)XSS靠的是瀏覽器端的DOM解析,完全是客戶(hù)端的事情。
XSS的防御措施:
-
過(guò)濾轉(zhuǎn)義輸入輸出
-
避免使用eval、new Function等執(zhí)行字符串的方法,除非確定字符串和用戶(hù)輸入無(wú)關(guān)
-
使用cookie的httpOnly屬性,加上了這個(gè)屬性的cookie字段,js是無(wú)法進(jìn)行讀寫(xiě)的
-
使用innerHTML、document.write的時(shí)候,如果數(shù)據(jù)是用戶(hù)輸入的,那么需要對(duì)象關(guān)鍵字符進(jìn)行過(guò)濾與轉(zhuǎn)義
推薦教程:web服務(wù)器安全