qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Web安全測試之XSS

          XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程序中最常見的漏洞。指攻擊者在網(wǎng)頁中嵌入客戶端腳本(例如JavaScript), 當用戶瀏覽此網(wǎng)頁時,腳本就會在用戶的瀏覽器上執(zhí)行,從而達到攻擊者的目的.  比如獲取用戶的Cookie,導航到惡意網(wǎng)站,攜帶木馬等。
            作為測試人員,需要了解XSS的原理,攻擊場景,如何修復。 才能有效的防止XSS的發(fā)生。
            XSS 是如何發(fā)生的呢
            假如有下面一個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代碼將會被執(zhí)行
            或者用戶輸入的是  "onfocus="alert(document.cookie)      那么就會變成
            <input type="text" name="address1" value="" onfocus="alert(document.cookie)">
            事件被觸發(fā)的時候嵌入的JavaScript代碼將會被執(zhí)行
            攻擊的威力,取決于用戶輸入了什么樣的腳本
            當然用戶提交的數(shù)據(jù)還可以通過QueryString(放在URL中)和Cookie發(fā)送給服務器. 例如下圖
            HTML Encode
            XSS之所以會發(fā)生, 是因為用戶輸入的數(shù)據(jù)變成了代碼。 所以我們需要對用戶輸入的數(shù)據(jù)進行HTML Encode處理。 將其中的"中括號", “單引號”,“引號” 之類的特殊字符進行編碼。
            在C#中已經(jīng)提供了現(xiàn)成的方法,只要調(diào)用HttpUtility.HtmlEncode("string <scritp>") 就可以了。  (需要引用System.Web程序集)
            Fiddler中也提供了很方便的工具, 點擊Toolbar上的"TextWizard" 按鈕
            XSS 攻擊場景
            1. Dom-Based XSS 漏洞 攻擊過程如下
            Tom 發(fā)現(xiàn)了Victim.com中的一個頁面有XSS漏洞,
            例如: http://victim.com/search.asp?term=apple
            服務器中Search.asp 頁面的代碼大概如下
           在網(wǎng)頁中的Textbox或者其他能輸入數(shù)據(jù)的地方,輸入這些測試腳本, 看能不能彈出對話框,能彈出的話說明存在XSS漏洞
            在URL中查看有那些變量通過URL把值傳給Web服務器, 把這些變量的值退換成我們的測試的腳本。  然后看我們的腳本是否能執(zhí)行
            方法三:  自動化測試XSS漏洞
            現(xiàn)在已經(jīng)有很多XSS掃描工具了。 實現(xiàn)XSS自動化測試非常簡單,只需要用HttpWebRequest類。 把包含xss 測試腳本。發(fā)送給Web服務器。 然后查看HttpWebResponse中,我們的XSS測試腳本是否已經(jīng)注入進去了。
            HTML Encode 和URL Encode的區(qū)別
            剛開始我老是把這兩個東西搞混淆, 其實這是兩個不同的東西。
            HTML編碼前面已經(jīng)介紹過了,關于URL 編碼是為了符合url的規(guī)范。因為在標準的url規(guī)范中中文和很多的字符是不允許出現(xiàn)在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編碼就是: 把所有非字母數(shù)字字符都將被替換成百分號(%)后跟兩位十六進制數(shù),空格則編碼為加號(+)
            在C#中已經(jīng)提供了現(xiàn)成的方法,只要調(diào)用HttpUtility.UrlEncode("string <scritp>") 就可以了。  (需要引用System.Web程序集)
            Fiddler中也提供了很方便的工具, 點擊Toolbar上的"TextWizard" 按鈕
            瀏覽器中的XSS過濾器
            為了防止發(fā)生XSS, 很多瀏覽器廠商都在瀏覽器中加入安全機制來過濾XSS。 例如IE8,IE9,F(xiàn)irefox, Chrome. 都有針對XSS的安全機制。 瀏覽器會阻止XSS。 例如下圖
            如果需要做測試, 最好使用IE7。
            ASP.NET中的XSS安全機制
            ASP.NET中有防范XSS的機制,對提交的表單會自動檢查是否存在XSS,當用戶試圖輸入XSS代碼的時候,ASP.NET會拋出一個錯誤如下圖
            很多程序員對安全沒有概念, 甚至不知道有XSS的存在。 ASP.NET在這一點上做到默認安全。 這樣的話就算是沒有安全意識的程序員也能寫出一個”較安全的網(wǎng)站“。
            如果想禁止這個安全特性, 可以通過 <%@  Page  validateRequest=“false"  %>

          posted on 2014-03-11 10:52 順其自然EVO 閱讀(690) 評論(0)  編輯  收藏 所屬分類: 安全性測試

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黑河市| 宝清县| 博白县| 五大连池市| 丰顺县| 和林格尔县| 宁海县| 通许县| 论坛| 南陵县| 马关县| 洛隆县| 左云县| 莲花县| 金寨县| 广昌县| 依兰县| 分宜县| 新沂市| 锡林郭勒盟| 德化县| 历史| 察雅县| 昌乐县| 南召县| 翼城县| 肃北| 琼结县| 博野县| 合水县| 长垣县| 龙口市| 麻江县| 洪湖市| 靖州| 靖江市| 桓台县| 神农架林区| 慈溪市| 萝北县| 邢台市|