老話重提:防范跨站腳本攻擊
今年5月,Web安全咨詢師George Deglin發現了一段成功實施了攻擊的跨站腳本(XSS)代碼,這段代碼利用了Facebook頗有爭議的即時個性化功能。該代碼在Facebook所選中的測試即時個性化的3個網站之一——Yelp上運行。運行該代碼段,Deglin不僅獲得了與Yelp共享的Facebook上的個人檔案信息,而且還截獲了發送檔案給Facebook好友的郵箱地址——這無論對于市場銷售人員還是垃圾郵件發送者來說都是一座潛在的金礦。
就在Deglin發現的XSS漏洞被修補上之后沒多久,另一個XSS漏洞又在Yelp上出現,搞得Facebook只好將該網站的即時個性化程序暫時掛起來。
XSS攻擊并不新鮮,但是隨著社交媒體的興起,又給了此類攻擊一片新的用武之地。
XSS簡單入門
最常見的XSS攻擊方法就是利用郵件:犯罪分子在一個普通的URL網址中添加一些特殊字符,例如添加幾個外文字符。這些字符會適時地告知運行事先制作好的腳本的Web服務器,舉例來說,一個攻擊者給你的網上銀行的網址中添加了這樣一個腳本,然后發郵件給你。假如你相信這是來自你的網上銀行的合法郵件,然后點擊了郵件提供的鏈接地址,那么你的瀏覽器就會給那臺Web服務器發送該腳本,這臺服務器上所運行的惡意代碼就會截獲你的瀏覽器cookies和你的銀行登錄信息,轉發給攻擊者,后者便可登錄進你的網上銀行賬號。
另一類XSS攻擊會將惡意代碼存放在一臺Web服務器上。攻擊者登錄比如說一家電子商務網站,然后發送一條含有XSS跨站腳本的消息。數天之后,如果你登錄了這家電子商務網站,閱讀了這條不良消息,就會和前一類一樣,該腳本盜取你的cookies和登錄信息,并將其轉發給犯罪分子,而他便可以冒充你了。
第三類XSS攻擊是針對Web瀏覽器的。在這種情形中,攻擊者會在你所訪問的網站上放置一個帶毒的Flash文件。當你的瀏覽器下載這段Flash視頻的時候,該文件便會觸發一個跨站腳本,攻擊者便可掌控你的瀏覽器所瀏覽的頁面元素。
Web 2.0和XSS
今天的很多網站在過濾常見的XSS供給方面都要比過去做得好。
假設你點擊了A網站上的一個廣告。但是你不知道的是,該廣告含有一個跨站腳本,可以悄悄地將你的瀏覽器定向到B網站,比如一家旅游網站和社交網站彼此合作,那么前者便可通過你的點擊而輕松獲得你的社交網絡檔案。利用XSS攻擊,你就成了一個犧牲品,你甚至不必去訪問B網站,登錄B網站,點擊它上面的任何東西,你甚至可能都不知道B網站的存在。由于B網站已經截獲了你的社交網絡檔案(可能還有你的好友們的檔案),于是犯罪分子便可以躲藏在A網站的廣告后面,大搖大擺地截獲你的信息了。這就是Web 2.0的聚合功能帶來的麻煩,也就是Facebook-Yelp的合作為什么會出現XSS攻擊的原因。
自我保護
遺憾的是,網站還無法通過連接加密簡單地防范XSS攻擊。有SSL連接的網站,也就是你在瀏覽一個加密網站時在工具欄上會出現一個小掛鎖的網站,也只不過是對攻擊進行了加密而已。一般來說,網站設計人員必須鎖定他們的網站才能防止XSS攻擊。
不過用戶也有兩種方法可避免XSS攻擊。其一是忽略一個網站到另一個網站的鏈接:比如說,如果A網站鏈接到somerandomsite.com/page,那么你如果先要上這個網站,最好不要去直接點擊該鏈接,而是通過搜索功能去查找該網站。這種方法可有效防止嵌入在鏈接網址中的XSS攻擊,但是這種方法用起來不太方便,而且當兩個網站共享內容時就沒辦法用了。另外一種方法是在你的瀏覽器中禁用像JavaScript腳本語言。即便因此可能會讓一些網站上的一些很不錯的功能沒法使用,只要你還能夠容忍就行。
禁止危險腳本
IE8是第一款內置了XSS腳本攔截保護的瀏覽器。谷歌的Chrome也會緊隨其后推出類似功能。這兩款瀏覽器都會首先查看來自某個Web服務器的腳本是否是惡意的——如果是,就攔截它。在今年4月的黑帽歐洲2010大會上,研究專家David Lindsay和Eduardo Vela Nava卻演示了一種可以破除這種攔截的辦法,不過谷歌已經修復了Chrome中的這個漏洞。微軟則在今年1月(補丁MS10-002)和3月(MS10-018)也已解決了大部分問題,并計劃在6月修復第3個漏洞,所以在你讀到這篇文章的時候,破除XSS腳本攔截的問題可能已經完全解決了。
Firefox的用戶則可以利用免費的NoScrpit附加組件有選擇地攔截腳本。比如說,你可以放行一段Flash視頻,而同時攔截該網站上的其他腳本組件。IE和Chrome在攔截可疑腳本方面沒有這么細的粒度——它們是要么全攔截,要么全不攔截。
NoScrpit也有一個問題,那就是大多數用戶并不喜歡放行個別腳本的做法,因為這樣會帶來不便。不過攔截和放行今后可能會成為你的第二天性。你還可以對某個特定網站上的所有腳本進行認證,無論是為了一次性訪問還是今后的所有訪問,這樣的認證如今在IE 8和chrome中也可以做了。
【編輯推薦】