Web系統(tǒng)因?yàn)槭敲嫦騃nternet/Intranet的,所以其安全性比常規(guī)的應(yīng)用程序系統(tǒng)更難以保證。
在談到其安全性的時(shí)候,很多的都是從“網(wǎng)絡(luò)安全”的角度去看待問題,殊不知,堡壘
的內(nèi)部是最最不安全的。對付“黑客攻擊”是系統(tǒng)管理員所要面對的問題,而如何更好的
加強(qiáng)堡壘內(nèi)部自身的安全,是在Web程序的設(shè)計(jì)中就需要考慮的問題。
系統(tǒng)管理員所要面對的網(wǎng)絡(luò)攻擊、操作系統(tǒng)?安全不是我所考慮的問題,如何加強(qiáng)Web系統(tǒng)
自身的健康是我所最最關(guān)心的事情。?
從“構(gòu)造URL”攻擊到“注入SQL文”攻擊,都是屬于過分信任用戶輸入,而造成的安全問題。
這恰恰應(yīng)該是由應(yīng)用程序自身加以重視、解決的問題。
基于角色的安全控制已經(jīng)逐漸的被大家逐漸的接受,每個(gè)用戶被分配為不同的角色,不同的角色
具有不同的操作權(quán)限。 但是如何劃分角色、用戶、操作權(quán)限,則是需要認(rèn)真對待的問題。
舉例:
一個(gè)MIS系統(tǒng)中,員工有查詢工資的權(quán)限,但是某個(gè)員工是否具有查詢其他員工的權(quán)限呢?
不能深入的追問問題,詳細(xì)的分辨清楚系統(tǒng)中到底有多少角色、每個(gè)用戶所在的角色,是不能完成安全控制的。
btw:?以上的問題,大家不妨在自己的類似系統(tǒng)中自己去檢查一下,有此問題的占絕大多數(shù)吧。
看過此文的,愿意回答“是”“否”的,可以留言,?也當(dāng)作一個(gè)調(diào)查吧。
上面的這個(gè)例子,就是一個(gè)很成熟的辦公系統(tǒng)中存在的問題。使用客戶端script腳本,控制了用戶的界面操作,殊不知maxthon就可以解除這個(gè)限制。此系統(tǒng)中,用戶的請求都被整理為URL(get方式提交),雖然URL中的鍵值含義并不是很明顯,但是還是可以嘗試著去攻擊,獲取秘密。
認(rèn)真的核查用戶的輸入,利用AOP部署,細(xì)密的對用戶的輸入進(jìn)行核查,是很有必要的事情。
某個(gè)人、某個(gè)資源、某個(gè)操作,這三個(gè)要素組織在一起則是:某個(gè)人對某個(gè)資源進(jìn)行某項(xiàng)操作
實(shí)際情況下,許多人、許多資源、對每個(gè)資源冰存在著多個(gè)操作。
將人、資源、操作進(jìn)行劃分,可以得到:
具體的某一類人,可以對某些資源,進(jìn)行某些的操作=》 這就是具體的某項(xiàng)權(quán)限限制。
??? 某一類人,則可以歸納為角色。
??? 對某些資源的某些操作,則可以歸納為工作任務(wù)。
也就是說,整個(gè)系統(tǒng)是“某個(gè)角色去完成某些工作任務(wù),而具體的一個(gè)帳戶屬于某個(gè)角色,某項(xiàng)工作則具體的是指對某個(gè)資源進(jìn)行某個(gè)操作”。
相對來說,系統(tǒng)中的人員是最容易辨認(rèn)的,系統(tǒng)中的資源也是可以在系統(tǒng)的功能調(diào)查時(shí)分清楚的,系統(tǒng)中的操作則是最復(fù)雜、最難分清晰,甚至在系統(tǒng)完成時(shí)都會變化的。
只有分辨清楚了系統(tǒng)中的人、資源、操作,才能辨別清楚系統(tǒng)中的具體的權(quán)限限制。
“基于角色的安全控制”這樣的提法,只提及了人,未能強(qiáng)調(diào)將資源、操作進(jìn)行規(guī)類,這是很不充分的一種提法。
在Web系統(tǒng)中,系統(tǒng)在設(shè)計(jì)的過程中,就分清楚資源,分清楚操作,極大縮小每個(gè)頁面的功能、提高頁面功能的原子性,這也是權(quán)限控制對系統(tǒng)設(shè)計(jì)提出的一項(xiàng)要求。
前面提及使用AOP進(jìn)行權(quán)限控制,現(xiàn)在簡述一下各部件的功能:
?? 業(yè)務(wù)模塊--完成具體的對某個(gè)資源的操作;
?? 前臺頁面模塊-- 完成整體頁面的整合;
?? 安全控制模塊--實(shí)現(xiàn)安全控制功能,完成人員、角色、工作的邏輯判斷;
?? AOP配置整合模塊--粘合安全控制模塊和業(yè)務(wù)模塊;
在于如何去解決,而是如何去發(fā)現(xiàn)。隱藏起來的問題更是危險(xiǎn)。
而如何發(fā)現(xiàn)問題,則完全是一個(gè)素質(zhì)、能力的事情,也許這是下一個(gè)話題。