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

跨站腳本

鎖定
跨站腳本(cross-site scripting,XSS)是一種安全攻擊,其中,攻擊者在看上去來源可靠的鏈接中惡意嵌入譯碼。它允許惡意用户將代碼注入到網頁上,其他用户在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及用户端腳本語言。
中文名
跨站腳本
外文名
cross-site scripting
簡    稱
XSS
性    質
安全攻擊
功    能
包含了HTML以及用户端腳本語言
領    域
網絡安全

跨站腳本簡介

跨站腳本(cross-site scripting,XSS)是一種安全攻擊,其中,攻擊者在看上去來源可靠的鏈接中惡意嵌入譯碼。當有人點擊鏈接,嵌入程序作為客户網絡要求的一部分提交併且會在用户電腦上執行,一般來説會被攻擊者盜取信息。
動態回覆包括用户輸入數據在內的錯誤信息這種網絡形式使得攻擊者可能改變控制結構和/或頁面的行為。攻擊者用多種方式進行攻擊,如通過在論壇信息或垃圾郵件信息鏈接中嵌入密碼。攻擊者可能用電郵詐騙假裝可信來源。
像其它網絡攻擊一樣,如SQL injection,很多對跨站腳本(cross-site scripting, XSS)的指責都指向引起可能性的不安全應用。動態產生頁面的網絡服務器應用如果不能確認用户輸入並確保產生的頁面都正確編碼了,他們會易受跨站腳本攻擊。能造成跨站腳本的攻擊有時候指得是跨站腳本漏洞。
為了不受跨站腳本(cross-site scripting, XSS)的攻擊,專家建議,網絡應用應該包括適當的安全機制,且服務器應該理所當然地確證輸入。
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用户加載並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括JavaVBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功後,攻擊者可能得到更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。 [1] 

跨站腳本背景和現狀

網景(Netscape)最初推出JavaScript語言時,他們也察覺到准許網頁服務器發送可執行的代碼給一個瀏覽器的安全風險(即使僅是在一個瀏覽器的沙盒裏)。它所造成的一個關鍵的問題在於用户同時打開多個瀏覽器視窗時,在某些例子裏,網頁裏的片斷代碼被允許從另一個網頁或對象取出數據,而因為惡意的網站可以用這個方法來嘗試竊取機密信息,所以在某些情形,這應是完全被禁止的。為了解決這個問題,瀏覽器採用了同源決策——僅允許來自相同域名系統和使用相同協議的對象與網頁之間的任何交互。這樣一來,惡意的網站便無法藉由JavaScript在另一個瀏覽器竊取機密數據。此後,為了保護用户免受惡意的危害,其他的瀏覽器與服務端指令語言採用了類似的訪問控制決策。
XSS漏洞可以追溯到1990年代。大量的網站曾遭受XSS漏洞攻擊或被發現此類漏洞,如TwitterFacebookMySpaceOrkut,新浪微博和百度貼吧。研究表明,最近幾年XSS已經超過緩衝區溢出成為最流行的攻擊方式,有68%的網站可能遭受此類攻擊。根據開放網頁應用安全計劃(Open Web Application Security Project)公佈的2010年統計數據,在Web安全威脅前10位中,XSS排名第2,僅次於代碼注入(Injection)。 [2] 

跨站腳本檢測方法

通常有一些方式可以測試網站是否有正確處理特殊字符:
><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
"><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert (vulnerable)</script>
%3Cscript%3Ealert('XSS')%3C/script%3E
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
<img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
<div style="height:expression(alert('XSS'),1)"></div>(這個僅限IE有效)

跨站腳本攻擊手段和目的

攻擊者使被攻擊者在瀏覽器中執行腳本後,如果需要收集來自被攻擊者的數據(如cookie或其他敏感信息),可以自行架設一個網站,讓被攻擊者通過JavaScript等方式把收集好的數據作為參數提交,隨後以數據庫等形式記錄在攻擊者自己的服務器上。
常用的XSS攻擊手段和目的有:
  • 盜用cookie,獲取敏感信息。
  • 利用植入Flash,通過crossdomain權限設置進一步獲取更高權限;或者利用Java等得到類似的操作。
  • 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用户的身份執行一些管理動作,或執行一些一般的如發微博、加好友、發私信等操作。
  • 利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當的投票活動。
  • 在訪問量極大的一些頁面上的XSS可以攻擊一些小型網站,實現DDoS攻擊的效果。 [2] 

跨站腳本漏洞的防禦和利用

跨站腳本過濾特殊字符

避免XSS的方法之一主要是將用户所提供的內容進行過濾,許多語言都有提供對HTML的過濾:
  • PHP的htmlentities()或是htmlspecialchars()。
  • Python的cgi.escape()。
  • ASP的Server.HTMLEncode()。
  • ASP.NET的Server.HtmlEncode()或功能更強的Microsoft Anti-Cross Site Scripting Library
  • Java的xssprotect (Open Source Library)。
  • Node.js的node-validator。 [2] 

跨站腳本使用HTTP頭指定類型

很多時候可以使用HTTP頭指定內容的類型,使得輸出的內容避免被作為HTML解析。如在PHP語言中使用以下代碼:
<?php   header('Content-Type: text/javascript; charset=utf-8');?>
即可強行指定輸出內容為文本/JavaScript腳本(順便指定了內容編碼),而非可以引發攻擊的HTML。 [2] 

跨站腳本用户方面

包括Internet ExplorerMozilla Firefox在內的大多數瀏覽器皆有關閉JavaScript的選項,但關閉功能並非是最好的方法,因為許多網站都需要使用JavaScript語言才能正常運作。通常來説,一個經常有安全更新推出的瀏覽器,在使用上會比很久都沒有更新的瀏覽器更為安全。 [2] 
參考資料
  • 1.    Leyden, John. Facebook poked by XSS flaw. The Register. May 23, 2008
  • 2.    古開元, 周安民. 跨站腳本攻擊原理與防範[J]. 網絡安全技術與應用, 2005(12):19-21.