(河西學院信息技術中心,甘肅張掖734000)
Web中XSS攻擊檢測與防范措施
王志春
(河西學院信息技術中心,甘肅張掖734000)
XSS(跨站腳本)攻擊,是惡意用戶利用驗證上的漏洞將腳本命令嵌入到可以顯示的數(shù)據中,使其在另一個用戶瀏覽時可以執(zhí)行這些腳本命令.針對XSS漏洞屢遭攻擊這一現(xiàn)狀,通過對XSS漏洞的詳盡分析,列舉了對XSS漏洞攻擊的檢測方式和方法.根據攻擊的特點,為系統(tǒng)的安全提出了相應的防御措施.
XSS;Web;跨站腳本;檢測;防范
Web2.0網絡使用戶與網站的互動更加方便和頻繁,用戶在論壇發(fā)表評論或留言,既是網站內容的瀏覽者,也是網站內容的制造者.但是,也帶來了網絡安全隱患,跨站腳本(Cross-Site Scripting,XSS)漏洞就是Web應用程序漏洞中較為突出的一類.XSS攻擊的原理是,訪問者利用Web應用程序的漏洞,通過網頁的輸入框上傳惡意的腳本代碼,通常是JavaScript腳本片段,而這些惡意輸入在提交后,重新讀回客戶端時會嵌入遠程Web頁面,當用戶對此站點進行再次訪問時,該用戶的瀏覽器就會自動加載并解釋執(zhí)行這些惡意的腳本.借助于這種巧妙注入惡意的指令碼到其它網域的服務網頁的方法,攻擊者可得到了更高的特權,竊取機密的網頁內容、會談的Cookie、以及許多其它的對象.
根據漏洞形成的原因,跨站腳本漏洞大致可以分為以下3類:反射式跨站腳本漏洞、儲存式跨站腳本漏洞和基于DOM的跨站點腳本漏洞.
反射式跨站腳本是非持久性跨站腳本的另一個名稱.當Web應用程序存在易受到這種攻擊的漏洞時,它會將未經驗證的數(shù)據通過請求發(fā)送給客戶端.如果未經驗證的客戶端輸入數(shù)據被直接包含在生成的頁面中,便可能造成客戶端腳本直接注入到動態(tài)頁面中.常見的攻擊手法一般通過攻擊者創(chuàng)建并構造畸形URL實現(xiàn),常見的攻擊者代碼是用JavaScript語言,但也會使用其它的腳本語言,例如,ActionS-cript和VBScript.攻擊者通常會利用這些漏洞來安裝鍵盤記錄器、竊取受害者的cookie、竊取剪貼板內容、改變網頁內容.
儲存式跨站腳本是一種最危險的跨站腳本,允許用戶存儲數(shù)據的Web應用程序都有可能接觸到這種類型的攻擊.如果Web應用程序從惡意用戶處收集了輸入數(shù)據并將這些數(shù)據存儲在數(shù)據庫中以供今后使用,就可能會發(fā)生儲存式跨站腳本攻擊,因為存儲的輸入數(shù)據沒有經過正確過濾,所以惡意數(shù)據將顯示為網站的一部分并在Web應用程序授權下在用戶瀏覽器中運行.當用戶使用較高特權訪問有存儲式跨站腳本漏洞的網頁時,那么儲存跨站腳本將更加危險,比如管理員訪問存在漏洞的網頁時,瀏覽器會自動執(zhí)行攻擊,這就可能導致敏感信息泄露,如會話授權令牌.
基于DOM的跨站點腳本的實際名稱是跨站腳本漏洞.該漏洞是動態(tài)網頁內容的結果,一般是JavaScript,網頁通過獲取用戶的輸入,然后進行一些不安全的操作導致產生XSS漏洞,攻擊者使用DOM元素和定制的代碼以控制代碼流程并改變流程.由于其性質,基于DOM的跨站點腳本漏洞可以在許多情況下執(zhí)行.
反射式XSS攻擊是在URL地址的參數(shù)中嵌入腳本來實現(xiàn)的.這種XSS攻擊比較簡單,正常的URL中HTTP標記是不會出現(xiàn)的,只需檢查URL中是否有HTTP的標記就可以知道是否有XSS攻擊了.為了檢測是否存在漏洞,必須需確定Web程序中的變量及其如何輸入;輸入無害的攻擊字段觸發(fā)瀏覽器以發(fā)現(xiàn)潛在的漏洞;針對已發(fā)現(xiàn)的漏洞進行攻擊,評估是否會對Web程序的安全產生實際影響.這需要使用許多測試向量,每個測試向量避免不同的過濾程序.例如,執(zhí)行下面的代碼:
規(guī)則表達將檢查是否插入了<script[anything but the character:'>']src,而類似的常見攻擊<script src=“http://attacker.com/xss.js”></script>對于過濾表達式很有效果.但是也有可能在腳本和SRC間的屬性中使用“>”字符繞過過濾程序,這將導致利用上述反射式跨站腳本漏洞.如:
XSS漏洞最常出現(xiàn)在讓用戶輸入信息并瀏覽的頁面,比如任何有輸入的地方:留言、回復、論壇、BLOG等.通常將腳本輸入到被攻擊站點的輸入域中,提交后,腳本代碼被儲存在有漏洞的服務器上,當用戶瀏覽此Web頁面時該腳本就開始執(zhí)行.應用程序存儲的輸入數(shù)據通常在HTML標記中使用,但它也可能在JavaScript內容中存在,通過分析HTML代碼以確認輸入數(shù)據是否存儲并且如何在網頁內容中定位來檢測漏洞.通常在注冊頁面中需要輸入郵箱,而包含郵箱值的HTML代碼為:
輸入驗證/過濾控制腳本測試應用程序,腳本如下:
提交輸入,如果實施客戶端的安全控制,通常會導致禁用JavaScript或修改HTTP請求,如WebScarab.重新加載頁面時瀏覽器存儲輸入并執(zhí)行跨站腳本,上述注入結果導致彈出包含cookie值的窗口.注入后的HTML代碼是:
如果Web應用程序允許文件上傳,就需要檢查是否有可能上傳HTML內容.如果允許HTML或TXT文件,那么在文件上傳時可能注入跨站腳本,需要驗證上傳的文件是否允許設置任意MIME類型.利用瀏覽器MIME的設計缺陷.例如,像JPG和GIF這種看似無害的文件可能包含一個跨站腳本,當瀏覽器裝載這些文件時,就會執(zhí)行該攻擊.當image/gif等圖像受到MIME攻擊時,他們可能設置成文本/HTML格式.在這種情況下,客戶端瀏覽器將把該文件視為HTML.
文件上傳時的HTTP POST請求:
Internet Explorer不按照Mozilla Firefox或其他瀏覽器相似的方式處理MIME類型.例如,Internet Explorer將包含HTML內容的TXT文件視為HTML內容.
反射式和儲存式漏洞是通過服務器傳遞跨站腳本中的參數(shù),返回給用戶并在用戶的瀏覽器中執(zhí)行,不需要服務器確定哪些需要執(zhí)行,導致許多一般的跨站腳本過濾和檢測規(guī)則對此類攻擊無能為力.假設使用下面的客戶端代碼:
攻擊者可能給受感染頁面追加#<script>alert('xss')</script>,導致在執(zhí)行該腳本時會顯示警告框,由于瀏覽器認為凡是有#字符都不是查詢的一部分,而只是一個片段,因此不會將附加的代碼發(fā)送給服務器.而JavaScript的應用程序跟他類型的應用程序有很大不同,他們往往是服務器動態(tài)生成的.
服務器端將數(shù)據插入到JavaScript:
客戶端JavaScript對象的輸入:
當通過服務器獲得輸入時,服務器可以使用任何方式排列數(shù)據,而JavaScript對象執(zhí)行的排列卻清楚易懂并便于記錄.
有很多工具可以在瀏覽器發(fā)送Get/Post請求前將其截取,攻擊者可以修改請求中的數(shù)據,從而繞過JavaScript的檢驗將惡意數(shù)據注入服務器.通過Web應用程序這個中間載體,竊取受害者客戶端的cookie或其他信息以冒充正??蛻粼赪eb應用程序上進行認證,從而完成攻擊.以下是一些常用的截取HTTP請求的工具:
這些工具可以被攻擊者用來截取并修改數(shù)據達到攻擊的目的,同時也可以用來對Web應用程序進行安全性測試.利用上述工具截取Web應用程序發(fā)送的數(shù)據并修改,主動向被測試的Web站點發(fā)送修改后的XSS輸入,通過判斷輸入輸出的情況,可以達到對Web站點進行XSS漏洞檢測的目的.
TamperIE小巧易用,能繞過客戶端瀏覽器JavaScript的校驗,監(jiān)視IE瀏覽器與服務器之間的HTTP通信,截取IE瀏覽器發(fā)送的Get/Post請求,修改其中的數(shù)據,然后再發(fā)送修改后的數(shù)據到服務器.如圖1所示:
圖1 TamperIE修改
XSS攻擊主要是利用程序中存在的漏洞,在用戶和WEB交互的過程中進行,所以需要在編碼和用戶兩方面采取相應的防范措施.
輸入驗證:用戶與網站進行交互的數(shù)據被顯示或存儲前,使用輸入驗證機制對用戶輸入的數(shù)據進行確認,檢測輸入數(shù)據的長度、類型和語法規(guī)則,保證輸入數(shù)據的長度不能太長、包含合法的字符并且與相應的正則表達式相匹配.
字符串過濾:網站對用戶提交的數(shù)據應進行HTML編碼,過濾惡意字符;保證瀏覽器可以安全的處理惡意代碼,把惡意的字符當作是HTML文檔的內容而非是結構;禁止用戶提交該類代碼,這類字符主要包括“<>”“%;()&+-”等.需要注意的是,僅查找或替換一些如“<”、“>”或類似“script”的關鍵字,很容易被XSS變種攻擊繞過驗證機制.
指定編碼方式:確保數(shù)據輸出前用戶提交的數(shù)據已被正確進行編碼,對所有字符進行編碼而不僅局限于某個子集.明確指定輸出的編碼方式如UTF8,不要允許攻擊者選擇編碼方式.
訪問可信任的站點,而且在訪問信任站點的時候最好是通過地址欄直接輸入地址進行訪問而不是通過其他站點的鏈接;不要輕易訪問其他人給你的鏈接,特別是跟了很長一段字符串的鏈接,因為這段字符可能是惡意的腳本進行編碼后的結果;禁止瀏覽器直接不經過任何限制的運行JavaScript或者ActiveX.;定時對防病毒軟件和防火墻進行升級.從網站用戶角度.當你打開一封Email或附瀏覽論壇帖子時,可能惡意腳本會自動執(zhí)行,因此,在做這些操作時一定要特別謹慎.建議在瀏覽器設置中關閉JavaScript.
XSS不同于普通的針對網站或者服務器的攻擊,是一種危害較大、較難防范并且隱蔽的攻擊方式.由于不易引起網站開發(fā)者的注意和重視,XSS攻擊才會對網站的訪問者造成非常大的安全威脅,所以XSS漏洞和攻擊的防范不僅需要網站開發(fā)者的重視,也需要瀏覽器的支持,以及用戶安全意識的提高.
[1]達斯孟,陸永忠,寧峰.客戶端跨站腳本攻擊的分層防御策略[J].計算機系統(tǒng)應用,2010(02).
[2]陳建青,張玉清.Web跨站腳本漏洞檢測工具的設計與實現(xiàn)[J].計算機工程,2010(06).
[3]羅來曦,朱漁.XSS跨站腳本攻擊方法初探[J].宜春學院學報,2009(06).
[4]孫握瑜,張業(yè)睿.跨站腳本攻擊原理與防范方法研究[J].內江科技,2010(05).
[5]趙玉龍,張旋,劉夢瑤,李沁蕾.跨站腳本攻擊實踐及防范[J].網絡安全技術與應用,2010(07).
TP39
A
1008-7974(2012)08-0027-03
2012-03-05
王志春(1976-),男,陜西洋縣人,河西學院信息技術中心講師.
(責任編輯:王前)