相信大家都或多或少的聽過關(guān)于各種Web應(yīng)用安全漏洞,諸如:跨sITe腳本攻擊(XSS),SQL注入,上傳漏洞……形形色色。
在這里我并不否認(rèn)各種命名與歸類方式,也不評(píng)價(jià)其命名的合理性與否,我想告訴大家的是,形形色色的安全漏洞中,其實(shí)所蘊(yùn)含安全問題本質(zhì)往往只有幾個(gè)。 我個(gè)人把Web應(yīng)用程序安全性本質(zhì)問題歸結(jié)以下三個(gè)部分:
1、輸入/輸出驗(yàn)證(Input/output validation)
2、角色驗(yàn)證或認(rèn)證(Role authentication )
3、所有權(quán)驗(yàn)證(Ownership authentication)
說到這,讀者一定想知道我這三種分類與形形色色的安全性問題有什么關(guān)系?下面我逐個(gè)給您概略解答:
輸入/輸出驗(yàn)證
這里的輸入與輸出其實(shí)都是發(fā)生在用戶界面(User Interface)這一個(gè)層面上的,比如:你某一站點(diǎn)上提交一份注冊(cè)信息,往往會(huì)收到諸多提示:“用戶名非法”,“姓名不能使用英文“……其實(shí)這就是輸入驗(yàn)證的一個(gè)實(shí)例。什么情況是輸出呢?比如說你成功提交一份注冊(cè)信息后,系統(tǒng)會(huì)返回一個(gè)確認(rèn)頁(Registerred Confirmation),往往在這個(gè)頁面上會(huì)顯示你注冊(cè)時(shí)提交的部分或全部信息,那么在這里顯示的信息就是我所說的輸出實(shí)例之一,輸入需要做什么驗(yàn)證?
假如你在提交時(shí),在Address那一欄輸入:
{script}alert("iwebsecurITy");{/script}
當(dāng)你到達(dá)注冊(cè)的確認(rèn)頁時(shí),會(huì)有什么發(fā)生?如果確認(rèn)頁沒有做輸出驗(yàn)證處理,那很顯然會(huì)在到達(dá)確認(rèn)頁的時(shí)候出現(xiàn)一個(gè)Javascript打出的提示框。其實(shí)這就是跨sITe腳本攻擊的一個(gè)小小的實(shí)例。當(dāng)然了,單純的輸入/輸出驗(yàn)證涉及的面可能夠?qū)懸恍”緯耍υ诤罄m(xù)文章中給大家詳解。
角色驗(yàn)證或認(rèn)證
我們就拿CSDN來說吧,用戶有這些角色:其一可以說是游客,就是瀏覽者沒有登錄時(shí)的角色;其二是免費(fèi)的注冊(cè)用戶;或許將來CSDN深入發(fā)展了,業(yè)務(wù)有所更新,還會(huì)出現(xiàn)收費(fèi)的注冊(cè)用戶。以上只是用戶角色,那在CSDN公司內(nèi)部還會(huì)有管理員角色,還有可能管理員又可以根據(jù)板塊分為各種不同的角色。大家看到了吧,你天天訪問的CSDN一共可能有多少角色?接下來的問題就是權(quán)限問題了,為什么會(huì)有角色?就是為了控制權(quán)限的。每種角色都有自己特定的與公共的權(quán)限,這些權(quán)限的邏輯關(guān)系是相當(dāng)復(fù)雜的,如果一個(gè)Web應(yīng)用在角色上沒有一個(gè)詳細(xì)的合理的設(shè)計(jì),將會(huì)給開發(fā)人員帶來無限痛苦和麻煩。那現(xiàn)在我要問幾個(gè)問題:你能保證每種角色只能做其份內(nèi)的事兒?你是如何去保證的呢?方法可靠嗎?有沒有漏洞?……這,就是我要說的角色驗(yàn)證或認(rèn)證。BTW:為什么我會(huì)說驗(yàn)證或認(rèn)證呢?你可以這么理解,角色性存在于兩個(gè)階段,其一進(jìn)入階段,比如你登錄的那一瞬間,你進(jìn)入了一個(gè)特定的角色;另一個(gè)階段就是維持階段,你如何確保你登錄后總是以登錄時(shí)的身份在操作呢?那前者可以說是:認(rèn)證,后者就是驗(yàn)證了。
給一個(gè)角色認(rèn)證/驗(yàn)證方面的虛擬案例,比如:一個(gè)在線電影服務(wù)提供商,會(huì)免費(fèi)給您開一個(gè)試用角色,如果這試用角色驗(yàn)證不當(dāng),可能會(huì)導(dǎo)致用戶權(quán)限提升而成為一個(gè)合法的收費(fèi)用戶,而這個(gè)收費(fèi)用戶你往往卻收不到他的任何費(fèi)用。
所有權(quán)驗(yàn)證
這個(gè)問題的存在也是基于角色的,只不過它所關(guān)心的是同級(jí)別的角色之間的權(quán)限問題。就拿CSDN來說吧,我是CSDN的一個(gè)免費(fèi)用戶,你也是。
現(xiàn)在的問題是:我可以替你操作嗎,我可以替你發(fā)表文章嗎?我能修改你的個(gè)性設(shè)置嗎?如果不能,CSDN是如何實(shí)現(xiàn)的?雖然你和我都是普通用戶,但是你有你的隱私我也有我的隱私,如何保證嚴(yán)格的所有權(quán)驗(yàn)證就顯得尤為關(guān)鍵了。比較簡(jiǎn)單吧,這就是我所說的所有權(quán)驗(yàn)證。
我可以很自信的告訴你,只要是Web應(yīng)用安全性問題,它逃不出在這三大部分,可能你還無法把形形色色的Web應(yīng)用安全性問題與這三個(gè)部分對(duì)應(yīng)并合理的解釋清楚,但是確實(shí)只有這么簡(jiǎn)單的幾個(gè)部分。


