XSS攻擊(跨站)

XSS攻擊

跨站一般指本詞條

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶載入並執行攻擊者惡意製造的網頁程式。這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到包括但不限於更高的許可權(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。

基本介紹

  • 中文名:跨站腳本攻擊
  • 外文名:Cross Site Scripting
  • 造成原因:程式漏洞
  • 攻擊手段:盜用cookie等
  • 特點:隱蔽性強、發起容易等特點
  • 所屬領域:計算機技術
簡述,原理,特點,類型,攻擊方式,防禦方法,

簡述

人們經常將跨站腳本攻擊(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)。

原理

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

特點

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

類型

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

攻擊方式

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

防禦方法

(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信息資料庫。
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。

相關詞條

熱門詞條

聯絡我們