時(shí)間: 2006-09-19 來(lái)自:綠盟科技
Web 2.0的概念始于O’Reilly與 MediaLive International的一次會(huì )議,自此之后,盡管針對Web 2.0的準確定義還存在著(zhù)許多爭論,但無(wú)疑Web 2.0已經(jīng)逐步生根了。無(wú)論是從技術(shù)角度還是人文角度出發(fā),Web 2.0都被賦予了大量的應用,blog、TAG、SNS、RSS、wiki等均占據著(zhù)顯赫的位置。
Web 2.0擁有眾多令人激動(dòng)的嶄新應用,新技術(shù)的采用所可能產(chǎn)生的新的安全問(wèn)題逐漸成為了人們關(guān)注的焦點(diǎn)。一如Web 1.0應用的安全問(wèn)題,在Web 2.0出現具體的、可驗證利用的安全漏洞和威脅之前,在設計、發(fā)布Web 2.0應用時(shí)重點(diǎn)需要注意的安全問(wèn)題也就自然成為了我們討論的議題。
一、技術(shù)體系的演變
Web的發(fā)展基本同步了網(wǎng)絡(luò )客戶(hù)端的發(fā)展,客戶(hù)端由早期近乎于啞終端的形態(tài)發(fā)展到今天所具有的強大處理能力,功能和性能的飛躍勢必帶動(dòng)需求的不斷提高,Web發(fā)展的每一步都有著(zhù)客戶(hù)端需求的印記。
早期的靜態(tài)HTML頁(yè)面只能顯示一些簡(jiǎn)單的內容,也反映了當時(shí)客戶(hù)端處理能力和需求的有限,這一時(shí)期的安全問(wèn)題也并不引人矚目,直到CGI腳本技術(shù)的出現和應用,Web安全問(wèn)題才被作為一個(gè)單獨的安全命題加以認識和討論,當客戶(hù)端強大到足以分擔計算、實(shí)現令人炫目的功能時(shí),Web 2.0安全問(wèn)題也被逐漸關(guān)注。
Web 2.0既是人文概念也是技術(shù)概念,作為Web技術(shù)的發(fā)展和自然演進(jìn),Web 2.0并非脫離早期Web技術(shù)的更迭版本,也不是單純的技術(shù)升級。應該認識到,很多技術(shù)已經(jīng)存在并發(fā)展了很長(cháng)時(shí)間,不應將其作為所謂Web版本區分的標準。因此,作為需求的產(chǎn)物,討論Web 2.0的安全問(wèn)題不能人為的割裂和原有技術(shù)的關(guān)聯(lián)性,也就是不能孤立地討論Web 2.0體系下發(fā)展出的技術(shù),如僅僅討論 Ajax 的安全問(wèn)題。
圖1 Web的自然演進(jìn)和安全問(wèn)題
對于Web 2.0而言,Client/Server 結構向 Web Services 結構的轉變使得討論其安全性不能像早期的Web應用一樣一概而論。但是,眾所周知,要具體實(shí)現一項Web應用,無(wú)論是否是基于Web 2.0的,Web服務(wù)器、實(shí)現Web服務(wù)的軟件系統、后臺數據庫系統,以及具體的數據提交、組織、交互技術(shù)實(shí)現手段(如XML、CGI、AJAX)等都是必不可少的。因此,和Web 1.0相同,Web 2.0仍然需要關(guān)注服務(wù)端系統、數據庫系統、實(shí)現技術(shù)等方面的安全問(wèn)題,而相關(guān)問(wèn)題的分類(lèi)仍然是參照Web訪(fǎng)問(wèn)結構,即服務(wù)端、客戶(hù)端、信道。
圖2 Web 2.0安全的結構性劃分
對于Web 2.0所充斥著(zhù)的大量技術(shù)概念,零散的討論其安全性是毫無(wú)意義的。因此,對于Web 2.0中具體的實(shí)現技術(shù),如AJAX(Asynchronous javascript And XML),套用Web 2.0中的原子內容(Atom Content)的概念,在討論其安全性時(shí),應該就其實(shí)現細節加以“拆分”,在所獲得的“原子技術(shù)”(Atom Technology)基礎上入手加以分析。
二、Web安全問(wèn)題
在Web 1.0應用中,很多安全問(wèn)題都是我們耳熟能詳的,其主要的安全風(fēng)險可概括為:
遠程代碼執行 (Remote Code Execution)
權限提升 (Privilege Escalation)
信息泄漏 (Information Disclosure)
內容修改 (Content Manipulation)
拒絕服務(wù) (Denial of Service)
無(wú)論是Web 1.0還是Web 2.0,依照Web訪(fǎng)問(wèn)的結構,可將其分為對Web服務(wù)器的安全威脅、對Web客戶(hù)端的安全威脅和對通信信道的安全威脅。因此,在討論Web安全時(shí),僅考慮Web服務(wù)端安全性的思維慣性是片面的。
1.Web服務(wù)器的安全
在Web安全中,服務(wù)器的安全是最為人津津樂(lè )道的內容。針對Web服務(wù)器具體的安全威脅主要體現在以下幾個(gè)方面:
l服務(wù)器程序編寫(xiě)不當導致的遠程代碼執行(Buffer Overflow)。
lCGI程序編寫(xiě)不當、過(guò)濾不嚴格造成的代碼注入(SQL Injection),可能引起信息泄漏、文件越權下載、驗證繞過(guò)、遠程代碼執行等。
l樂(lè )觀(guān)相信用戶(hù)輸入、過(guò)濾不嚴格導致跨站腳本攻擊(XSS, Cross Site Script),在欺騙管理員的前提下,通過(guò)精心設計的腳本獲得服務(wù)端Shell。
l針對服務(wù)器系統的拒絕服務(wù)攻擊(Denial of Service)。
2.Web客戶(hù)端的安全
Web 2.0應用的迅速普及,客戶(hù)端交互力量獲得了極為充分的釋放和發(fā)揮,客戶(hù)端的安全必然會(huì )成為Web安全的下一輪焦點(diǎn)――如同“Web 1.5”時(shí)代后臺數據庫系統進(jìn)入Web安全視野一樣。
Java Applet、ActiveX、Cookie等技術(shù)的大量應用,當用戶(hù)使用瀏覽器查看、編輯網(wǎng)絡(luò )內容時(shí),采用了這些技術(shù)的應用程序會(huì )自動(dòng)下載并在客戶(hù)機上運行,如果這些程序被惡意使用,可以竊取、改變或刪除客戶(hù)機上的信息。對于惡意程序的侵害,用戶(hù)很難實(shí)時(shí)的判斷程序性質(zhì),因此,在獲得高度交互的Web服務(wù)時(shí),如何抵御這些安全威脅絕非簡(jiǎn)單的客戶(hù)端設置就可以解決的。
同時(shí),跨站腳本攻擊(XSS)對于客戶(hù)端的安全威脅同樣無(wú)法忽視,跨站腳本攻擊屬于被動(dòng)式的攻擊,因為其被動(dòng)且不好利用,所以許多人常忽略其危害性。與之相對的是,利用XSS的Web 2.0蠕蟲(chóng)已經(jīng)在網(wǎng)絡(luò )中肆虐過(guò)。
3.Web通信信道的安全
和其他的Internet應用一樣,Web信道同樣面臨著(zhù)網(wǎng)絡(luò )嗅探(Sniffer)和以擁塞信道、耗費資源為目的的拒絕服務(wù)攻擊(Denial of Service)的威脅。
需要注意的是,很多針對Web應用的攻擊并非只針對服務(wù)端、客戶(hù)端或信道,綜合利用各方面的安全漏洞進(jìn)行攻擊的案例數不勝數。
以上列舉的安全威脅并非2.0版本之前Web所獨有,正如前文所述,割裂、孤立的考慮Web 2.0的安全是有失偏頗的。分析Web 2.0的安全首先應考慮Web安全,其次考慮融合了新事物的“2.0 安全”,我們在Web 2.0命題中至少應該注意以下潛在的安全威脅:
SQL注入
跨站腳本攻擊(XSS)和腳本注入(Script Injection)
緩沖區溢出(Buffer Overflow)
javascript安全
客戶(hù)端應用程序的安全
拒絕服務(wù)攻擊(Denial of Service)
網(wǎng)絡(luò )嗅探(Sniffer)
三、Web 2.0實(shí)現技術(shù)的安全問(wèn)題
Web 2.0中,大量“原子技術(shù)”(如客戶(hù)端Script技術(shù))對于Web 2.0來(lái)說(shuō)是作為其必要條件存在的,Web 2.0誕生的新的技術(shù)和方法很難加以籠統的概括。因此,我們僅以AJAX(Asynchronous javascript And XML)為例對特定的Web 2.0安全進(jìn)行討論。
AJAX技術(shù)的動(dòng)人之處在于異步(Asynchronous),在提供流暢、快捷和人性化的Web體驗的同時(shí),對其安全性的疑問(wèn)從未停止,而第一款開(kāi)源AJAX掃描器Sprajax的發(fā)布再一次將AJAX安全推到了用戶(hù)的面前。隨著(zhù)越來(lái)越多的使用AJAX技術(shù)的應用出現,很多組織將必須考慮潛在的安全缺陷以及性能問(wèn)題。
腳本問(wèn)題
AJAX的安全威脅來(lái)自于日益復雜的服務(wù)端腳本和客戶(hù)端腳本,采用優(yōu)良的程序設計和編碼方法可以有效降低風(fēng)險。
XMLHttpRequest對象的安全問(wèn)題
javascript的XmlHttpRequest對象是AJAX的核心,XMLHttpRequest對象允許客戶(hù)端機器通過(guò)HTTP請求獲得XML文檔,如果服務(wù)器響應重定向到本地文件的請求,腳本安全檢查將會(huì )繞過(guò)并且文件可訪(fǎng)問(wèn),這將導致泄露敏感信息給遠程攻擊者。
另外,根據可驗證的XMLHttpRequest的本地數據讀取能力,以XMLHttpRequest與服務(wù)器之間的交互能力,存在著(zhù)客戶(hù)端數據泄漏的可能。
拒絕服務(wù)更容易發(fā)生
由于使用了異步機制,攻擊性客戶(hù)端的負擔比以往要輕的多,可以發(fā)動(dòng)更多的資源發(fā)起拒絕服務(wù)攻擊,例如發(fā)送大量的臟數據,服務(wù)器的拒絕服務(wù)很容易發(fā)生。一種結果就是服務(wù)器資源耗盡,或者因為拒絕服務(wù)而引起服務(wù)器宕機。
在簡(jiǎn)要描述AJAX應用過(guò)程中需要注意的一些安全問(wèn)題的同時(shí),也建議在具體的AJAX實(shí)現中參照下列要點(diǎn)給予必要的重視:
進(jìn)行SQL注入測試
進(jìn)行跨站腳本攻擊和腳本注入測試
通過(guò)編碼或借助于其他設備對收到的請求進(jìn)行源驗證
通過(guò)約束、拒絕和過(guò)濾對請求數據進(jìn)行檢查,確保數據的真實(shí)性、正確性
進(jìn)行必要的身份驗證
不要為了“AJAX”而“AJAX”