版權歸原作者所有,如有侵權,請聯(lián)系我們

[科普中國]-跨站腳本

科學百科
原創(chuàng)
科學百科為用戶提供權威科普內(nèi)容,打造知識科普陣地
收藏

跨站腳本(cross-site scripting,XSS)是一種安全攻擊,其中,攻擊者在看上去來源可靠的鏈接中惡意嵌入譯碼。它允許惡意用戶將代碼注入到網(wǎng)頁上,其他用戶在觀看網(wǎng)頁時就會受到影響。這類攻擊通常包含了HTML以及用戶端腳本語言。

簡介跨站腳本(cross-site scripting,XSS)是一種安全攻擊,其中,攻擊者在看上去來源可靠的鏈接中惡意嵌入譯碼。當有人點擊鏈接,嵌入程序作為客戶網(wǎng)絡要求的一部分提交并且會在用戶電腦上執(zhí)行,一般來說會被攻擊者盜取信息。

動態(tài)回復包括用戶輸入數(shù)據(jù)在內(nèi)的錯誤信息這種網(wǎng)絡形式使得攻擊者可能改變控制結構和/或頁面的行為。攻擊者用多種方式進行攻擊,如通過在論壇信息或垃圾郵件信息鏈接中嵌入密碼。攻擊者可能用電郵詐騙假裝可信來源。

像其它網(wǎng)絡攻擊一樣,如SQL injection,很多對跨站腳本(cross-site scripting, XSS)的指責都指向引起可能性的不安全應用。動態(tài)產(chǎn)生頁面的網(wǎng)絡服務器應用如果不能確認用戶輸入并確保產(chǎn)生的頁面都正確編碼了,他們會易受跨站腳本攻擊。能造成跨站腳本的攻擊有時候指得是跨站腳本漏洞。

為了不受跨站腳本(cross-site scripting, XSS)的攻擊,專家建議,網(wǎng)絡應用應該包括適當?shù)陌踩珯C制,且服務器應該理所當然地確證輸入。

XSS攻擊通常指的是通過利用網(wǎng)頁開發(fā)時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。這些惡意網(wǎng)頁程序通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,F(xiàn)lash或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到更高的權限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容、會話和cookie等各種內(nèi)容。1

背景和現(xiàn)狀當網(wǎng)景(Netscape)最初推出JavaScript語言時,他們也察覺到準許網(wǎng)頁服務器發(fā)送可執(zhí)行的代碼給一個瀏覽器的安全風險(即使僅是在一個瀏覽器的沙盒里)。它所造成的一個關鍵的問題在于用戶同時打開多個瀏覽器視窗時,在某些例子里,網(wǎng)頁里的片斷代碼被允許從另一個網(wǎng)頁或?qū)ο笕〕鰯?shù)據(jù),而因為惡意的網(wǎng)站可以用這個方法來嘗試竊取機密信息,所以在某些情形,這應是完全被禁止的。為了解決這個問題,瀏覽器采用了同源決策——僅允許來自相同域名系統(tǒng)和使用相同協(xié)議的對象與網(wǎng)頁之間的任何交互。這樣一來,惡意的網(wǎng)站便無法借由JavaScript在另一個瀏覽器竊取機密數(shù)據(jù)。此后,為了保護用戶免受惡意的危害,其他的瀏覽器與服務端指令語言采用了類似的訪問控制決策。

XSS漏洞可以追溯到1990年代。大量的網(wǎng)站曾遭受XSS漏洞攻擊或被發(fā)現(xiàn)此類漏洞,如Twitter,F(xiàn)acebook,MySpace,Orkut,新浪微博和百度貼吧。研究表明,最近幾年XSS已經(jīng)超過緩沖區(qū)溢出成為最流行的攻擊方式,有68%的網(wǎng)站可能遭受此類攻擊。根據(jù)開放網(wǎng)頁應用安全計劃(Open Web Application Security Project)公布的2010年統(tǒng)計數(shù)據(jù),在Web安全威脅前10位中,XSS排名第2,僅次于代碼注入(Injection)。2

檢測方法通常有一些方式可以測試網(wǎng)站是否有正確處理特殊字符:

='>">%3Cscript%3Ealert('XSS')%3C/script%3E(這個僅限IE有效)攻擊手段和目的攻擊者使被攻擊者在瀏覽器中執(zhí)行腳本后,如果需要收集來自被攻擊者的數(shù)據(jù)(如cookie或其他敏感信息),可以自行架設一個網(wǎng)站,讓被攻擊者通過JavaScript等方式把收集好的數(shù)據(jù)作為參數(shù)提交,隨后以數(shù)據(jù)庫等形式記錄在攻擊者自己的服務器上。

常用的XSS攻擊手段和目的有:

盜用cookie,獲取敏感信息。

利用植入Flash,通過crossdomain權限設置進一步獲取更高權限;或者利用Java等得到類似的操作。

利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻擊)用戶的身份執(zhí)行一些管理動作,或執(zhí)行一些一般的如發(fā)微博、加好友、發(fā)私信等操作。

利用可被攻擊的域受到其他域信任的特點,以受信任來源的身份請求一些平時不允許的操作,如進行不當?shù)耐镀被顒印?/p>

在訪問量極大的一些頁面上的XSS可以攻擊一些小型網(wǎng)站,實現(xiàn)DDoS攻擊的效果。2

漏洞的防御和利用過濾特殊字符避免XSS的方法之一主要是將用戶所提供的內(nèi)容進行過濾,許多語言都有提供對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頭指定內(nèi)容的類型,使得輸出的內(nèi)容避免被作為HTML解析。如在PHP語言中使用以下代碼:

即可強行指定輸出內(nèi)容為文本/JavaScript腳本(順便指定了內(nèi)容編碼),而非可以引發(fā)攻擊的HTML。2

用戶方面包括Internet Explorer、Mozilla Firefox在內(nèi)的大多數(shù)瀏覽器皆有關閉JavaScript的選項,但關閉功能并非是最好的方法,因為許多網(wǎng)站都需要使用JavaScript語言才能正常運作。通常來說,一個經(jīng)常有安全更新推出的瀏覽器,在使用上會比很久都沒有更新的瀏覽器更為安全。2

本詞條內(nèi)容貢獻者為:

宋春霖 - 副教授 - 江南大學