複製鏈接
請複製以下鏈接發送給好友

XSS攻擊

鎖定
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用户加載並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括JavaVBScriptActiveX、 Flash 或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。 [1] 
中文名
跨站腳本攻擊
外文名
Cross Site Scripting
造成原因
程序漏洞
攻擊手段
盜用cookie等
特    點
隱蔽性強、發起容易等特點
所屬領域
計算機技術

XSS攻擊簡述

人們經常將跨站腳本攻擊(Cross Site Scripting)縮寫為CSS,但這會與層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆。因此,有人將跨站腳本攻擊縮寫為XSS。
跨站腳本攻擊(XSS),是最普遍的Web應用安全漏洞。這類漏洞能夠使得攻擊者嵌入惡意腳本代碼到正常用户會訪問到的頁面中,當正常用户訪問該頁面時,則可導致嵌入的惡意腳本代碼的執行,從而達到惡意攻擊用户的目的。
攻擊者可以使用户在瀏覽器中執行其預定義的惡意腳本,其導致的危害可想而知,如劫持用户會話,插入惡意內容、重定向用户、使用惡意軟件劫持用户瀏覽器、繁殖XSS蠕蟲,甚至破壞網站、修改路由器配置信息等。
XSS漏洞可以追溯到上世紀90年代。大量的網站曾遭受XSS漏洞攻擊或被發現此類漏洞,如Twitter、Facebook、MySpace、Orkut、新浪微博和百度貼吧。研究表明,最近幾年XSS已經超過緩衝區溢出成為最流行的攻擊方式,有68%的網站可能遭受此類攻擊。根據開放網頁應用安全計劃(Open Web Application Security Project)公佈的2010年統計數據,在Web安全威脅前10位中,XSS排名第2,僅次於代碼注入(Injection)。 [1] 

XSS攻擊原理

HTML是一種超文本標記語言,通過將一些字符特殊地對待來區別文本和標記,例如,小於符號(<)被看作是HTML標籤的開始,<title>與</title>之間的字符是頁面的標題等等。當動態頁面中插入的內容含有這些特殊字符(如<)時,用户瀏覽器會將其誤認為是插入了HTML標籤,當這些HTML標籤引入了一段JavaScript腳本時,這些腳本程序就將會在用户瀏覽器中執行。所以,當這些特殊字符不能被動態頁面檢查或檢查出現失誤時,就將會產生XSS漏洞。

XSS攻擊特點

與釣魚攻擊相比,XSS攻擊所帶來的危害更大,通常具有如下特點:
①由於XSS攻擊在用户當前使用的應用程序中執行,用户將會看到與其有關的個性化信息,如賬户信息或“歡迎回來”消息,克隆的Web站點不會顯示個性化信息。
②通常,在釣魚攻擊中使用的克隆Web站點一經發現,就會立即被關閉。
③許多瀏覽器與安全防護軟件產品都內置釣魚攻擊過濾器,可阻止用户訪問惡意的克隆站點。
④如果客户訪問一個克隆的Web網銀站點,銀行一般不承擔責任。但是,如果攻擊者通過銀行應用程序中的XSS漏洞攻擊了銀行客户,則銀行將不能簡單地推卸責任。 [2] 

XSS攻擊類型

從攻擊代碼的工作方式可以分為三個類型:
(1)持久型跨站:最直接的危害類型,跨站代碼存儲在服務器(數據庫)。
(2)非持久型跨站:反射型跨站腳本漏洞,最普遍的類型。用户訪問服務器-跨站鏈接-返回跨站代碼。
(3)DOM跨站(DOM XSS):DOM(document object model文檔對象模型),客户端腳本處理邏輯導致的安全問題。
基於DOM的XSS漏洞是指受害者端的網頁腳本在修改本地頁面DOM環境時未進行合理的處置,而使得攻擊腳本被執行。在整個攻擊過程中,服務器響應的頁面並沒有發生變化,引起客户端腳本執行結果差異的原因是對本地DOM的惡意篡改利用。

XSS攻擊攻擊方式

常用的XSS攻擊手段和目的有:
1、盜用cookie,獲取敏感信息。
2、利用植入Flash,通過crossdomain權限設置進一步獲取更高權限;或者利用Java等得到類似的操作。
3、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用户的身份執行一些管理動作,或執行一些一般的如發微博、加好友、發私信等操作。
4、利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當的投票活動。
5、在訪問量極大的一些頁面上的XSS可以攻擊一些小型網站,實現DDoS攻擊的效果。 [1] 

XSS攻擊防禦方法

(1)基於特徵的防禦。XSS漏洞和著名的SQL注入漏洞一樣,都是利用了Web頁面的編寫不完善,所以每一個漏洞所利用和針對的弱點都不盡相同。這就給XSS漏洞防禦帶來了困難,不可能以單一特徵來概括所有XSS攻擊。
傳統的XSS防禦在進行攻擊鑑別時多采用特徵匹配方式,主要是針對“javascript”這個關鍵字進行檢索,但是這種鑑別不夠靈活,凡是提交的信息中各有“javascript”時,就被硬性的被判定為XSS攻擊。
(2)基於代碼修改的防禦。Web頁面開發者在編寫程序時往往會出現一些失誤和漏洞,XSS攻擊正是利用了失誤和漏洞,因此一種比較理想的方法就是通過優化Web應用開發來減少漏洞,避免被攻擊:1)用户向服務器上提交的信息要對URL和附帶的HTTP頭、POST數據等進行查詢,對不是規定格式、長度的內容進行過濾。2)實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。3)確認接收的內容被妥善的規範化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。
當然,如上操作將會降低Web業務系統的可用性,用户僅能輸入少量的制定字符,人與系統間的交互被降到極致,僅適用於信息發佈型站點。並且考慮到很少有Web編碼人員受過正規的安全培訓,很難做到完全避免頁面中的XSS漏洞。
(3)客户端分層防禦策略。客户端跨站腳本攻擊的分層防禦策略是基於獨立分配線程和分層防禦策略的安全模型。它建立在客户端(瀏覽器),這是它與其他模型最大的區別,之所以客户端安全性如此重要,客户端在接受服務器信息,選擇性的執行相關內容。這樣就可以使防禦XSS攻擊變得容易,該模型主要由三大部分組成:1)對每一個網頁分配獨立線程且分析資源消耗的“網頁線程分析模塊”;2)包含分層防禦策略四個規則的用户輸入分析模塊;3)保存互聯網上有關XSS惡意網站信息的XSS信息數據庫。 [3] 
XSS攻擊主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序員較高的編程能力和安全意識,當然安全的軟件開發流程及其他一些編程安全原則也可以大大減少XSS安全漏洞的發生。這些防範XSS漏洞原則包括:
(1)不信任用户提交的任何內容,對所有用户提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、REFER、POST數據等,僅接受指定長度範圍內、採用適當格式、採用所預期的字符的內容提交,對其他的一律過濾。儘量採用POST而非GET提交表單;對“<”,“>”,“;”,“””等字符做過濾;任何內容輸出到頁面之前都必須加以en-code,避免不小心把htmltag顯示出來。
(2)實現Session 標記(session tokens)、CAPTCHA(驗證碼)系統或者HTTP引用頭檢查,以防功能被第三方網站所執行,對於用户提交信息的中的img等link,檢查是否有重定向回本站、不是真的圖片等可疑操作。
(3)cookie 防盜。避免直接在cookie中泄露用户隱私,例如email、密碼,等等;通過使cookie和系統IP綁定來降低cookie泄露後的危險。這樣攻擊者得到的cookie沒有實際價值,很難拿來直接進行重放攻擊。
(4)確認接收的內容被妥善地規範化,僅包含最小的、安全的Tag(沒有JavaScript),去掉任何對遠程內容的引用(尤其是樣式表和JavaScript),使用HTTPonly的cookie。 [2] 
參考資料