跨站腳本攻擊與SQL注入攻擊區別在於XSS主要影響的是客戶端安全,SQL注入主要影響Web服務器安全。前端
1、反射式XSSweb
非持久型、參數型跨站腳本,主要用於將惡意腳本附加到URL地址的參數中。正則表達式
low:安全
服務器端核心代碼:服務器
觀察到並無對name進行任何的過濾操做,xss
那麼輸入<script>alert(123456)</script>觀察到彈窗。函數
Medium:3d
看到有一個 $name = str_replace( '<script>', '', $_GET[ 'name' ] );blog
這個函數將字符「<script>」換爲NULL,那麼因爲函數只執行一次,有多種方法能夠繞過。事件
好比將這個標籤雙寫繞過,可是隻能過濾一次,就達成了咱們的目的。
好比:<sc<script>ript>alert(123456)</script>
或者使用大小寫混淆的方法。
<Script>alert(123456)</script>
High:
觀察到使用了正則表達式來過濾:
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'
那麼咱們就不能使用大小寫繞過和重寫的方法來繞過了。
雖然沒法使用<script>標籤注入XSS代碼,可是能夠經過img、body等標籤的事件或者iframe等標籤的src注入惡意的js代碼。這樣就會避免出現<script>標籤被正則表達式匹配到。
咱們可使用如下:
<img src=" " onerror=alert('xss')>
(由於src無咱們就能夠將其路徑設置爲null)
Impossible:
2、存儲式XSS
持久型跨站腳本,更具威脅性,而且可能影響到web服務器自身的安全。XSS一般用於發動Cookie竊取、惡意軟件傳播(蠕蟲攻擊)、會話劫持、惡意重定向等。存儲式XSS會保存在服務器上,有可能會跨頁面存在,它不改變頁面URL的原有結構,因此有時候還能逃過一些IDS檢測。
從攻擊過程來講,反射式XSS通常要求攻擊者誘使用戶單擊一個包含XSS代碼的URL連接;而存儲式XSS則只需讓用戶查看一個URL連接,這個連接中存儲了一個腳本。
low
輸入有限制,修改前端最大長度後插入<script>alert(123456)</script> 語句xss
Medium
仍是加一個<script>標籤過濾,可使用上述方法進行繞過(重寫或者大小寫繞過)
使用<Script>alert(/xss/)</Script>繞過:
High
一樣正則過濾,使用
<img src=1 οnerrοr=alert(/XSS/)>
Impossible