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