XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意制造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容
XSS分為三個類型:存儲型 、反射型 、DOM型XSS
1、反射型XSS
存儲型XSS和反射型XSS的差別僅在於,提交的代碼會存儲在服務器端(數據庫,內存,文件系統等),下次請求目標頁面時不用再提交XSS代碼
2、反射型XSS
發出請求時,XSS代碼出現在URL中,作為輸入提交到服務器端,服務器端解析后響應,XSS代碼隨響應內容一起傳回給瀏覽器,最后瀏覽器解析執行XSS代碼。這個過程像一次反射,故叫反射型XSS。
3、DOM XSS
DOM XSS和反射型XSS、存儲型XSS的差別在於DOM XSS的代碼並不需要服務器參與,觸發XSS靠的是瀏覽器端的DOM解析,完全是客戶端的事情。
4、 漏洞防范
(1) 特殊字符HTML實體轉碼。最好的過濾方式是在輸出和二次調用的時候進行加HTML實體一類的轉碼,防止腳本注入。
(2) 標簽事件屬性黑名單。特殊字符容易被繞過,所以還得加標簽事件得黑名單或者白名單,這里推薦使用白名單的方式,實現規則可以直接使用正則表達式來匹配,如果匹配到的事件不在白名單列表,就可以直接攔截,而不是過濾為空。