開篇
做任何系統(tǒng)都離不開和繞不過權(quán)限的控制,尤其是B/S系統(tǒng)工作原理的特殊性使得權(quán)限控制起來更為繁瑣,所以就在想是否可以利用IIS的工作原理,在IIS處理客戶端請求的某個入口或出口通過判斷URL來達(dá)到控制權(quán)限的目的,這樣就可以減少通常要在每個頁面或按鈕都要添加的權(quán)限驗(yàn)證代碼。
通常的權(quán)限驗(yàn)證模式
一般的權(quán)限驗(yàn)證會控制到菜單(頁面)就可以滿足,復(fù)雜一點(diǎn)的會要求控制到按鈕(功能點(diǎn)),這個都需要做一下幾點(diǎn)工作:
1.按權(quán)限生成菜單,這是所有系統(tǒng)都要做的;
2.在每個頁面的開始處添加登錄和權(quán)限的驗(yàn)證,調(diào)用公共的驗(yàn)證方法,這個地方經(jīng)常將頁面的編號搞混;
3.隱藏(或這直接不生成)頁面上沒有權(quán)限的按鈕;
4.在功能的響應(yīng)點(diǎn)添加權(quán)限驗(yàn)證代碼,添加、修改、刪除等功能的后臺處理入口處加判斷。
這四個步驟中2、3、4都是比較繁瑣的,非常容易搞錯頁面或功能的編號(通常是復(fù)制過來忘記修改),B/S系統(tǒng)要做好權(quán)限驗(yàn)證杜絕漏洞這四個點(diǎn)的控制都很重要的,當(dāng)然不需要控制到按鈕的第三步就可以省略了,有些時(shí)候大家會忽略對第四步的驗(yàn)證,比如在調(diào)用.ashx(一般處理程序)頁面處理操作請求時(shí),并沒有在.ashx后臺的代碼中進(jìn)行權(quán)限(或登錄)驗(yàn)證,這樣就存在安全隱患了。
新的的權(quán)限驗(yàn)證模式設(shè)計(jì)
新的權(quán)限驗(yàn)證模式想要達(dá)到的目的是將上面的 2、3、4繁瑣的權(quán)限驗(yàn)證調(diào)用去掉,在IIS處理請求的總?cè)肟诨虺隹谕ㄟ^請求的URL判斷是否有權(quán)限,根據(jù)判斷的結(jié)果對請求進(jìn)行不同的處理(終止、跳轉(zhuǎn)、提示或正常處理)。
通過查閱互聯(lián)網(wǎng)資料發(fā)現(xiàn)可以通過httpModules來實(shí)現(xiàn),對httpModules的詳細(xì)介紹請參照點(diǎn)擊打開鏈接
httpModules介紹博客地址:http://m.survivalescaperooms.com/chenlulouis/archive/2009/12/18/1626918.html
通用權(quán)限驗(yàn)證組件設(shè)計(jì):
1.選擇在httpModules的PReRequestHandlerExecute事件作為權(quán)限驗(yàn)證控制點(diǎn),在這個事件前面的其它事件session還沒有生效無法取到用戶信息,越往后的事件所處理完成的請求越多,權(quán)限認(rèn)證肯定是越早越好,所以就選擇了這個事件。
2.通過配置文件控制權(quán)限的驗(yàn)證,需要配置的點(diǎn)主要有:
2.1基礎(chǔ)配置:數(shù)據(jù)庫連接字符串、URL截取規(guī)則、登錄頁面(為登錄時(shí)跳轉(zhuǎn))、提示信息(沒有權(quán)限時(shí))、登錄驗(yàn)證Session標(biāo)志;
2.2驗(yàn)證URL:URL拼接參數(shù)配置(有些頁面要拼接參數(shù)后作為整體判斷權(quán)限);
2.3需驗(yàn)證頁面:限定驗(yàn)證范圍,圖片、js文件這些肯定是不需要驗(yàn)證的,需要驗(yàn)證的通常情況下也都是可預(yù)知的,可按后綴名或路徑配置;
2.4忽略驗(yàn)證頁面:在需要驗(yàn)證的配置范圍內(nèi)有些頁面是不需要驗(yàn)證的,如登錄頁、主框架頁、修改密碼等,可按后綴名或路徑配置;
2.5權(quán)限查詢語句:根據(jù)取到的URL判斷登錄用戶是否有權(quán)限的SQL語句和語句參數(shù);
2.6字功能查詢語句:查詢有權(quán)限的子功能的SQL語句和語句參數(shù),權(quán)限需要控制到按鈕時(shí)才需要。
3.實(shí)現(xiàn)參數(shù)的導(dǎo)入、解析按配置的要求實(shí)現(xiàn)權(quán)限的驗(yàn)證控制。
結(jié)尾
這樣一個簡單的ASP.NET通用權(quán)限驗(yàn)證組件就設(shè)計(jì)完畢了,接下來就是用代碼實(shí)現(xiàn)了,本人計(jì)劃用C#代碼實(shí)現(xiàn)這個設(shè)計(jì),主要是想通過這個組件的開發(fā)加深對IIS工作原理的認(rèn)識和理解,提升開發(fā)通用功能的能力。
新聞熱點(diǎn)
疑難解答
圖片精選