一:什么是跨站腳本?
跨站腳本(cross site script)為了避免與樣式css混淆,所以簡稱為XSS。
XSS是一種經(jīng)常出現(xiàn)在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。
XSS是指惡意攻擊者利用網(wǎng)站沒有對用戶提交數(shù)據(jù)進行轉(zhuǎn)義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使別的用戶訪問都會執(zhí)行相應的嵌入代碼。
不同于大多數(shù)攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與網(wǎng)站。XSS的攻擊目標是為了盜取客戶端的cookie或者其他網(wǎng)站用于識別客戶端身份的敏感信息。獲取到合法用戶的信息后,攻擊者甚至可以假冒最終用戶與網(wǎng)站進行交互。
從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。
二:跨站腳本攻擊的分類
( Reflected Cross-site Scripting)
反射型跨站腳本
也稱作非持久型、參數(shù)型跨站腳本.
① 主要用于將惡意腳本附加到URL地址的參數(shù)中
② 只在用戶單擊url時觸發(fā),而且只執(zhí)行一次,非持久化
③常用來竊取客戶端 Cookies或進行釣魚欺騙.
④常常為通過引誘用戶點擊一個惡意鏈接來實施攻擊的
存儲型跨站腳本
① 惡意代碼被保存到目標網(wǎng)站的服務器中,
每次用戶訪問時都會執(zhí)行腳本代碼,這種攻擊具有較強的穩(wěn)定性和持久性
② 比反射型跨站腳本更具威脅性,并且可能影響到Web服務器自身的安全.
③ 一般出現(xiàn)在網(wǎng)站的留言、評論、日志等交互處,
三:跨站腳本攻擊的危害
網(wǎng)絡釣魚,包括盜取各類用戶賬號;
竊取用戶cookies資料,從而獲取用戶隱私信息
,或利用用戶身份進一步對網(wǎng)站執(zhí)行操作;
劫持用戶(瀏覽器)會話,從而執(zhí)行任意操作,例如進行非法轉(zhuǎn)賬、強制發(fā)表日志、發(fā)送電子郵件等;
強制彈出廣告頁面、刷流量等;
網(wǎng)頁掛馬;進行惡意操作,例如任意篡改頁面信息、刪除文章等
進行大量的客戶端攻擊,如DDoS攻擊;
獲取客戶端信息,例如用戶的瀏覽歷史、真實IP、開放端口等;
控制受害者機器向其他網(wǎng)站發(fā)起攻擊;
結合其他漏洞,如CSRF漏洞,實施進一步作惡;
提升用戶權限,包括進一步滲透網(wǎng)站;
傳播跨站腳本蠕蟲等;
四:DOMBasedXSS(基于dom的跨站點腳本攻擊)
基于DOM的XSS有時也稱為type0XSS。當用戶能夠通過交互修改瀏覽器頁面中的DOM(DocumentObjectModel)并顯示在瀏覽器上時,就有可能產(chǎn)生這種漏洞,從效果上來說它也是反射型XSS。
通過修改頁面的DOM節(jié)點形成的XSS,稱之為DOMBasedXSS。
前提是易受攻擊的網(wǎng)站有一個HTML頁面采用不安全的方式從document.location 或document.URL 或 document.referrer獲取數(shù)據(jù)(或者任何其他攻擊者可以修改的對象)。
五:XSS漏洞的普及率有多高?
國際Web應用安全組織WASC(Web Application Security Consortium)最新數(shù)據(jù)[4]表明,采樣分析了10297個網(wǎng)站,其中有31.47%站點存在XSS漏洞,且XSS在發(fā)現(xiàn)的漏洞中占到總數(shù)的41.41%,高居榜首。
六:能否列舉XSS實例?
2005年,一位叫Samy的MySpace用戶自創(chuàng)了一種XSS蠕蟲,24小時內(nèi),其網(wǎng)絡空間朋友數(shù)目成功從73上升到1百萬。
2006年,PayPal遭到XSS攻擊,攻擊者將PayPal站點的訪問者重定向到一個新的頁面,上面警告用戶他們的帳號已經(jīng)不再安全,需要重新設置,并提示輸入PayPal的登錄信息、用戶社保信息及信用卡信息。
2008年5月,eBay承認其PayPal頁面存在XSS漏洞,該漏洞會被攻擊者用于盜取用戶證書或cookie。
七:加密是否能有效防護XSS攻擊?
通常大家會認為如果網(wǎng)站使用了HTTPS,提供更有保障的安全,可以幸免于XSS攻擊。其實這是一種誤解。HTTPS僅提供傳輸層的安全,在應用層仍然面臨XSS的威脅。
八:從網(wǎng)站開發(fā)者角度,如何防護XSS攻擊?
來自應用安全國際組織OWASP的建議,對XSS最佳的防護應該結合以下兩種方法:驗證所有輸入數(shù)據(jù),有效檢測攻擊;對所有輸出數(shù)據(jù)進行適當?shù)木幋a,以防止任何已成功注入的腳本在瀏覽器端運行。具體如下:
輸入驗證:某個數(shù)據(jù)被接受為可被顯示或存儲之前,使用標準輸入驗證機制,驗證所有輸入數(shù)據(jù)的長度、類型、語法以及業(yè)務規(guī)則。
強壯的輸出編碼:數(shù)據(jù)輸出前,確保用戶提交的數(shù)據(jù)已被正確進行entity編碼,建議對所有字符進行編碼而不僅局限于某個子集。
明確指定輸出的編碼方式(如ISO 8859-1或 UTF 8):不要允許攻擊者為你的用戶選擇編碼方式。
注意黑名單驗證方式的局限性:僅僅查找或替換一些字符(如"<" ">"或類似"script"的關鍵字),很容易被XSS變種攻擊繞過驗證機制。
警惕規(guī)范化錯誤:驗證輸入之前,必須進行解碼及規(guī)范化以符合應用程序當前的內(nèi)部表示方法。請確定應用程序?qū)ν惠斎氩蛔鰞纱谓獯a。
九:從網(wǎng)站用戶角度,如何防護XSS攻擊?
當你打開一封Email或附件、瀏覽論壇帖子時,可能惡意腳本會自動執(zhí)行,因此,在做這些操作時一定要特別謹慎。建議在瀏覽器設置中關閉JavaScript。如果使用IE瀏覽器,將安全級別設置到“高”。具體可以參照瀏覽器安全的相關文章。
這里需要再次提醒的是,XSS攻擊其實伴隨著社會工程學的成功應用,需要增強安全意識,只信任值得信任的站點或內(nèi)容。
十:下一代XSS會是怎樣的?
隨著AJAX(Asynchronous JavaScript and XML,異步JavaScript和XML)技術的普遍應用,XSS的攻擊危害將被放大。使用AJAX的最大優(yōu)點,就是可以不用更新整個頁面來維護數(shù)據(jù),Web應用可以更迅速地響應用戶請求。AJAX會處理來自Web服務器及源自第三方的豐富信息,這對XSS攻擊提供了良好的機會。AJAX應用架構會泄漏更多應用的細節(jié),如函數(shù)和變量名稱、函數(shù)參數(shù)及返回類型、數(shù)據(jù)類型及有效范圍等。AJAX應用架構還有著較傳統(tǒng)架構更多的應用輸入,這就增加了可被攻擊的點。