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