DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX基礎知識 >> AJAX真的不安全?
AJAX真的不安全?
編輯:AJAX基礎知識     

作者:cleverpig

image


版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接
作者:cleverpig
原文:http://www.matrix.org.cn/resource/article/2007-02-07/a5f2d5c6-b677-11db-82df-078095a5dcde.html
關鍵字:AJAX,安全,XSS,CSRF,漏洞

前言

        日前網絡中流行圍繞AJAX和安全風險的討伐聲浪讓人不絕於耳。這種火熱的新技術已經被鋪天蓋地地應        用在各種web應用(構建如Gmail、Google Maps這些基於web的應用),但在其炙手可熱的光環背後隱藏著一個黑暗的鬼怪——AJAX正在為心懷惡意的hacker打開著後門。但這並不完全正確。恰好,目前幾乎所有的web應用開發老手和安全專家都正在力圖沖過冷嘲熱諷式的取笑,觸及到事情的真相:多數web站點都是不安全,但AJAX並不是罪魁禍首。盡管AJAX不能使web站點變得絲毫安全,但理解它能做些什麼是非常重要的。

        AJAX(Asynchronous JavaScript + XML)是web浏覽器技術的集合體,它允許web頁面內容飛速地更新而無需刷新頁面。在使用AJAX的web頁面背後,數據(通常格式化為XML,但也可以是HTML、JavaScript等格式)在web服務器與客戶端浏覽器之間來回傳輸。比如在Gmail應用場景中,新的郵件信息被自動接收和顯示。在Google Maps應用場景中,用戶可以通過鼠標拖拽的方式在地圖中的街區之間穿梭漫游。這種執行異步數據傳輸的機制是一個嵌入在所有現代web浏覽器內部的、被稱為XMLHTTPRequest(XHR)的軟件庫。XHR是web站點獲得“AJAX”商標的關鍵。另一方面,它也是一些實現了“奇思妙想”的JavaScript。

        如果你正在思考這究竟和安全有什麼關系,那麼你是正確的。AJAX技術使站點平滑地與用戶交互,並給用戶帶來更多的回應。而在web服務器上並沒有任何改變,而安全焦點卻應該著重在web服務器端。如果這是事實的話,那麼我們每個人還考慮什麼?在計算機安全社區中,AJAX意味著大量攻擊平面(attack surface)、驟增的復雜性、偽造請求、拒絕服務、跨站腳本(XSS)、依賴於客戶端安全等等。而事實上,這些問題在AJAX出現之前就已經存在。並且推薦給開發者的安全最佳實踐也從沒有因為AJAX的出現而改變過。如果你像我一樣想知道到底哪些才是重要的,那麼請讓我們進行一次深入的討論。

名詞解釋

       Cross-site scripting (XSS):跨站腳本是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞越過訪問控制——例如同源策略(same origin policy)。近來,這種類型的漏洞被用來編寫危害性更大的phishing攻擊和利用浏覽器漏洞。

       Same Origin Policy:計算機術語。這裡譯為“同源策略”。它是對於客戶端腳本(尤其是JavaScript)的重要安全 度量標准。它首先出自Netscape Navigator2.0。之後歷經Navigator2.01和Navigator2.02的修正完善。其目的在於防止某個文檔或者腳本從多個不同 “origin”(源)裝載。 這裡的單詞“origin”指使用域名、協議、端口。

       Cross-site request forgery(CSRF):跨站請求偽造,也被稱成為“one click attack”或者session riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,並且攻擊方式幾乎相左。XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防范,所以被認為比XSS更具危險性。

AJAX導致大量的“攻擊平面”?——不!

        “攻擊平面”一詞被應用到通過對系統中開放攻擊點的分析來度量安全的概念中。對於軟件,這些點便是被第三方(用戶)操作數據輸入、輸出的區域。顯而易見,具有相對越少的安全平面使應用越安全。同樣明顯的是,對於web應用或者任何應用,編寫的功能點與攻擊平面同樣多。這並不和用戶接口是否采用AJAX、Flash、ASCII藝術字或者其它任何方式有關。AJAX是一種浏覽器技術,且不在服務端執行。當AJAX驅使開發者公開地暴露更多的功能時,便可能引入新的“服務器端”漏洞——你並不能責備AJAX。新的代碼總意味著增加漏洞的風險。

        更進一步講,從本人的經驗看,使用AJAX技術的web應用在功能上並不具有比傳統的標准web應用更多的復雜性。Google Maps就是一個比看似簡單的craigslist的更簡練的應用。Gmail也比Outlook Web Access更加輕巧。而且,使用AJAX進行Web應用設計(或者重新設計)將給在使用新式平台上(.NET,J2EE等)進行開發帶來更多的機會。這些平台與生俱來就更加安全、不會出現例如SQL注入、證書會話推算(

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved