XSS三種類型
- 存儲(chǔ)型XSS:數(shù)據(jù)庫中存在XSS攻擊的數(shù)據(jù),若數(shù)據(jù)未經(jīng)過任何轉(zhuǎn)義,返回給客戶端。被瀏覽器渲染,就可能導(dǎo)致XSS攻擊
- 反射型XSS:將用戶輸入的存在XSS攻擊的數(shù)據(jù),發(fā)送給服務(wù)端,服務(wù)端并未對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),也未經(jīng)過任何轉(zhuǎn)義,直接返回給客戶端。被瀏覽器渲染。就可能導(dǎo)致XSS攻擊
- 純粹發(fā)生在客戶端的XSS攻擊
XSS攻擊演示
假設(shè)用戶輸入的參數(shù)為:
<script>alert(xss)</script>
如果后臺(tái)沒有對(duì)該數(shù)據(jù)做任何過濾直接顯示到前端<div>標(biāo)簽中的話,源代碼就變成了這樣:
<div><script>alert(xss)</script><div>
那么在前端顯示出來的是一個(gè)寫著xss的彈窗,就發(fā)生了xss攻擊
防御方案
我在項(xiàng)目中的主要的防御方案是對(duì)數(shù)據(jù)的過濾,對(duì)于數(shù)據(jù)中的危險(xiǎn)字符進(jìn)行相應(yīng)的轉(zhuǎn)義:
&----->&
<-----><
>----->>
"----->"
'----->'
/----->/