1. 程式人生 > >【安全測試】Web應用安全之XSS跨站指令碼攻擊漏洞相關

【安全測試】Web應用安全之XSS跨站指令碼攻擊漏洞相關

閱讀目錄

歡迎轉載,也請註明出處 :http://www.cnblogs.com/Detector/p/8811216.html 謝謝!



前言

以前都只是在各類文件中見到過XSS,也進行過相關的學習,但是都是一知半解,過了一段時間就忘了。

前幾天我們收到了了一份標題為《XX賬號暱稱引數中存在儲存XSS漏洞》的報告文件,來源是一個叫漏洞盒子的機構,看它的官方介紹,是一個網際網路安全測試眾測平臺。

第一次在實際工作中遇到相關的問題,所以決定再系統的學習一下,此篇為學習記錄。

XSS概念及分類

XSS 全稱(Cross Site Scripting),直譯過來就是跨站指令碼攻擊,是Web程式中最常見的漏洞。

有點類似於SQL注入,可以簡單理解為“HTML注入”,把使用者輸入的資料當做指令碼執行,進而達到想要的目的。而這種目的通常是惡意的,比如獲取使用者的Cookie,導航到惡意網站,攜帶木馬等。

XSS攻擊可以根據攻擊發生的實時性分為以下幾類:

反射型XSS(非永續性XSS)

簡單說可充當執行指令碼的惡意資料,由使用者從“外部”輸入,通過提交輸入的方式“嵌入”到網頁url中。

簡單舉例:
針對存在XSS攻擊的某個網頁輸入框中輸入“惡意資料”,並提交,通常,這類提交操作對應著一個get請求,當我們把這個請求傳送給其他使用者,並讓使用者在web瀏覽器中開啟請求,這時就會把惡意資料當作指令碼再次執行,比如傳送cookie等資訊到指定的郵箱等。

儲存型XSS(持久型XSS)

類似反射型XSS,不同的是,其“惡意資料”本身就是包含在網頁原始碼中、或者自動從伺服器內部讀取並“嵌入”網頁中。

簡單舉例:
黑客在某個論壇寫了一篇文章,並在文章中寫入了用會充當指令碼執行的資料,比如一段惡意javascript程式碼,這樣所有瀏覽該文章的使用者,都會自動在其瀏覽器中執行這段惡意程式碼。

非永續性XSS漏洞一般威脅的是使用者個體,持久型XSS所威脅的物件可能是是大量的使用者.

如何測試XSS漏洞

站在一個測試的角度,我們要怎麼來對XSS漏洞進行測試呢?

方法一:

檢視程式碼,查詢關鍵的變數, 客戶端將資料傳送給Web 服務端一般通過三種方式 Querystring, Form表單,以及cookie. 例如在ASP的程式中,通過Request物件獲取客戶端的變數

<%
strUserCode =  Request.QueryString(“code”);
strUser =  Request.Form(“USER”);
strID =    Request.Cookies(“ID”);
%>

假如變數沒有經過htmlEncode處理, 那麼這個變數就存在一個XSS漏洞

方法二: 

準備測試指令碼:

"/><script>alert(document.cookie)</script><!--
<script>alert(document.cookie)</script><!--
"onclick="alert(document.cookie)

在網頁中的Textbox或者其他能輸入資料的地方,輸入這些測試指令碼,看能不能彈出對話方塊,能彈出的話說明存在XSS漏洞

XSS漏洞修復

原則:不相信客戶輸入的資料

XSS之所以會發生, 是因為使用者輸入的資料變成了程式碼。所以我們需要對使用者輸入的資料進行HTML Encode處理。 將其中的”中括號”、“單引號”、“引號”之類的特殊字元進行編碼。

攻擊程式碼不一定在<script></script>,所以要做好以下措施:

將重要的cookie標記為http only,  這樣的話Javascript中的document.cookie語句就不能獲取到cookie了.  

只允許使用者輸入我們期望的資料。
> 例如:年齡的textbox中,只允許使用者輸入數字。   而數字之外的字元都過濾掉。

對資料進行Html Encode 處理
過濾或移除特殊的Html標籤,  
> 例如: <script>, <iframe> ,  &lt; for <, &gt; for >, &quot for

過濾JavaScript 事件的標籤。  
> 例如 "onclick=", "onfocus" 等等。

處理建議

1、輸入過濾:在使用者輸入的引數進行過濾,過濾掉’<’,’>’等符號,或者script,input,onerror等標籤。
2、輸出過濾:將使用者輸入內容作為頁面內容的時候必須經過檢測與過濾。使用HTMLEncode將以下特殊字元進行轉碼

參考資料: