ASP.NET環(huán)境下為網(wǎng)站增加IP過濾功能第1/2頁(yè)
1. 需求分析
通過深入的交流和溝通,確認(rèn)了該發(fā)電廠在企業(yè)網(wǎng)站用戶訪問控制方面的改進(jìn)要求,大致情況如下:
a) 網(wǎng)站基于Asp.Net2.0實(shí)現(xiàn),不允許修改源程序
b) 廠內(nèi)用戶可直接訪問整個(gè)站點(diǎn)的所有頁(yè)面,員工不需要身份驗(yàn)證
c) 廠外用戶只能訪問指定的頁(yè)面
顯而易見,他們就是針對(duì)企業(yè)網(wǎng)站增加一項(xiàng)IP過濾功能,在廠外用戶訪問某些敏感頁(yè)面時(shí)將其拒之門外。首先我們需要設(shè)置一個(gè)IP列表和一個(gè)Url列表,前者包含所有廠內(nèi)IP,后者包含廠外用戶可訪問的全部Url,并且這兩個(gè)列表都是可維護(hù)的;另外一個(gè)核心問題是,我們需要選擇一個(gè)合理的方式將開發(fā)好的功能模塊集成到企業(yè)網(wǎng)站中,HttpModules義不容辭。
在Asp.Net時(shí)代,IIS 接收到請(qǐng)求并將其調(diào)度給 aspnet_isapi.dll之后,ASP.NET 引擎開始逐個(gè)對(duì)已配置的HTTP模塊(HttpModules)進(jìn)行初始化,然后再調(diào)用正確的HTTP處理程序并呈現(xiàn)被請(qǐng)求的資源,最后將所生成的標(biāo)記返回給 IIS 和請(qǐng)求客戶端(如下圖所示)。

IIS 和 ASP.NET 正在處理請(qǐng)求
如果你想了解更多關(guān)于HttpModules的資料,請(qǐng)自行查閱。
2. 方案設(shè)計(jì)
2.1. 開發(fā)環(huán)境
編程語(yǔ)言:C#2.0
開發(fā)工具:Visual Studio.NET2008
操作系統(tǒng):windows2003 R2
2.2. 概要設(shè)計(jì)
使用HttpModules實(shí)現(xiàn)IP過濾功能的核心思想是:自定義一個(gè)HttpModule捕獲每一個(gè)用戶請(qǐng)求,然后獲取相關(guān)的用戶IP和被請(qǐng)求的Url進(jìn)行邏輯判斷,將未授權(quán)的請(qǐng)求重定向到一個(gè)錯(cuò)誤提示頁(yè)。Http請(qǐng)求授權(quán)與否的判斷邏輯為:
1) 判斷請(qǐng)求是否來自本地計(jì)算機(jī),是則自動(dòng)忽略,否則繼續(xù);
2) 判斷用戶IP是否屬于內(nèi)網(wǎng)(IP列表),是則忽略,否則繼續(xù);
3) 判斷被請(qǐng)求Url是否授權(quán)所有用戶訪問,是則忽略,否則繼續(xù);
4) 將請(qǐng)求重定向到錯(cuò)誤提示頁(yè)。

在HttpApplication的BeginRequest事件中附加自定義的處理程序即可完成Http請(qǐng)求的捕獲。此外,為了便于維護(hù)我們應(yīng)將程序運(yùn)行需要的各項(xiàng)參數(shù)(IP列表、Url列表、錯(cuò)誤提示頁(yè)路徑等等)存儲(chǔ)于特定的XML配置文件中,為了提高效率,我們還需要將配置文件執(zhí)行內(nèi)存級(jí)的緩存處理并對(duì)IP、Url匹配算法進(jìn)行適當(dāng)?shù)膬?yōu)化。
相關(guān)文章
解決AJAX.NET中的懸停panel在頁(yè)面加載時(shí)閃爍的問題
AJAX.NET的兩個(gè)懸??丶?分別是HoverMenuExtender和ModalPopupExtender.他們可以打造很好的懸停效果...通常,我都是用panel來作為懸停內(nèi)容的容器..2009-06-06
一步步打造簡(jiǎn)單的MVC電商網(wǎng)站BooksStore(3)
這篇文章主要和大家一起一步步打造一個(gè)簡(jiǎn)單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第三篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
ASP.NET MVC實(shí)現(xiàn)橫向展示購(gòu)物車
這篇文章介紹了ASP.NET MVC實(shí)現(xiàn)橫向展示購(gòu)物車的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
asp.net 參數(shù)不同共用一個(gè)頁(yè)面的實(shí)現(xiàn)方法
本文為大家介紹下asp.net參數(shù)不同如何共用一個(gè)頁(yè)面,感興趣的朋友不要錯(cuò)過2013-12-12
.NET截取指定長(zhǎng)度漢字超出部分以"..."代替 實(shí)例分享
.NET截取指定長(zhǎng)度漢字超出部分以"..."代替 實(shí)例分享,需要的朋友可以參考一下2013-06-06
.net core并發(fā)請(qǐng)求發(fā)送HttpWebRequest的坑解決
這篇文章主要給大家介紹了關(guān)于.net core并發(fā)請(qǐng)求發(fā)送HttpWebRequest的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2018-12-12
ASP.NET連接SQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例代碼
這篇文章介紹了ASP.NET連接SQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例代碼,有需要的朋友可以參考一下2013-07-07
.NET Core Dapper操作mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
這篇文章主要介紹了.NET Core Dapper操作mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

