最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET環(huán)境下為網(wǎng)站增加IP過濾功能第2/2頁

 更新時間:2009年06月30日 02:02:04   作者:  
通過深入的交流和溝通,確認(rèn)了該發(fā)電廠在企業(yè)網(wǎng)站用戶訪問控制方面的改進(jìn)要求

2.3. 配置緩存算法

配置文件的緩存參照微軟CommonServer項目中的實現(xiàn)邏輯,將配置信息持久化為實體類存儲于HttpContext.Current.Cache中,配置文件發(fā)生后緩存信息將自動清空,下次訪問時再次執(zhí)行持久化操作,不需重啟站點(diǎn)。本文對CommonServer的緩存邏輯不做深入探討,感興趣者可自行搜索相關(guān)資料。

2.4. IP列表算法

通過上文可知,當(dāng)前項目用到的IP列表包含的數(shù)據(jù)量非常有限,就是電廠web服務(wù)器可有效識別的內(nèi)網(wǎng)IP的窮舉。

因而我們將整個IP列表緩存,使用時直接檢索當(dāng)前用戶IP是否存在于列表之中即可。在具體IP的存儲方面,我們可將其視作256進(jìn)制,將IP字符串轉(zhuǎn)換為數(shù)字格式(例如:192.168.10.3可視作192*256*256*256+168*256*256+10*256+3=3232238083,不考慮IPV6);在參數(shù)配置的格式方面,我們應(yīng)同時支持單個IP或IP段的方式增刪IP列表。

2.5. Url列表算法

就具體需求而言,Url列表是一個授權(quán)外網(wǎng)用戶訪問的白名單,換個說法,“對外網(wǎng)用戶而言除了在列表之中的其他都不可訪問”,一旦數(shù)據(jù)的安全級別降低,會不會出現(xiàn)“對外網(wǎng)用戶而言除了列表之中的其他都可以訪問”的情況出現(xiàn)呢?為了兼容這種后續(xù)場景,我們需要為Url列表定義一個“是否黑名單”(IsBlacklist)的附加參數(shù);另外,對于動態(tài)網(wǎng)站窮舉Url顯然是不現(xiàn)實的,不管是維護(hù)黑名單還是白名單,所以我們可以轉(zhuǎn)變一下思路,更改最終Url為正則表達(dá)式,即:維護(hù)一個可匹配目標(biāo)Url的正則表達(dá)式列表,針對用戶請求的具體Url逐個正則表達(dá)式執(zhí)行匹配操作,只要有一個匹配成功則認(rèn)為當(dāng)前Url存在于Url列表之中。

3. 編碼實現(xiàn)

由于本文提供全部的c#源碼下載,所以本節(jié)僅對源碼壓縮包中的主要文件進(jìn)行簡要說明:

以下為引用的內(nèi)容:
DotCommon.WebsiteFilter
│  DotCommonWebsiteFilter.cfg.xml
│  WebsiteFilterConfiguration.cs
│  WebsiteFilterHttpModule.cs 
├─Util
│      GlobesCache.cs
│      XmlAttributeReader.cs 
└─WebsiteFilter
        IPMatchEngine.cs
        UrlMatchCondition.cs
        UrlMatchEngine.cs

DotCommonWebsiteFilter.cfg.xml

運(yùn)行參數(shù)配置文件

WebsiteFilterConfiguration.cs

配置文件實體類

WebsiteFilterHttpModule.cs

實現(xiàn)了System.Web.IHttpModule接口的自定義Http模塊

GlobesCache.cs

全局緩存操控類

XmlAttributeReader.cs

xml節(jié)點(diǎn)屬性讀取器

IPMatchEngine.cs

IP匹配引擎

UrlMatchCondition.cs

Url匹配條件(與正則表達(dá)式匹配)

UrlMatchEngine.cs

Url匹配引擎

WebsiteFilterHttpModule.cs中BeginRequest自定義處理程序的核心代碼如下:

以下為引用的內(nèi)容:
void context_BeginRequest(object sender, EventArgs e)
        {
            
if (HttpContext.Current.Request.IsLocal)//忽略本地計算機(jī)請求
                return;
            
string ip = HttpContext.Current.Request.UserHostAddress;
            
if (!WebsiteFilterConfiguration.GetConfig().PickedIPs.IsMatch(ip))
            {   
//若在IP列表中找不到訪客ip                
                string rawUrl = HttpContext.Current.Request.RawUrl;
                UrlMatchEngine pu 
= WebsiteFilterConfiguration.GetConfig().PickedUrls;
                
//列表包含當(dāng)前url且列表為黑名單、列表不包含當(dāng)前url且列表不為黑名單  時需轉(zhuǎn)向
                
//換而言之,“配備結(jié)果”與“是否黑名單”取值一致時需轉(zhuǎn)向
                if (pu.IsMatch(rawUrl) == pu.IsBlacklist)
                {   
//非公開url自動重定向
                    HttpContext.Current.Response.Redirect(pu.ErrorPage);
                }
            } 
     }

4. 部署應(yīng)用

4.1. DotCommonWebsiteFilter.cfg.xml配置文件

配置文件的根節(jié)點(diǎn)為DotCommon,所有配置信息均為WebsiteFilter節(jié)點(diǎn)的子項。PickedUrl節(jié)點(diǎn)對應(yīng)Url列表,IsBlacklist(1是0否)指示是否為黑名單,ErrorPage指定錯誤提示頁路徑,其子節(jié)點(diǎn)add可重復(fù)出現(xiàn),通過pattern屬性指定正則表達(dá)式文本,上圖所示配置表示僅網(wǎng)站首頁(default.aspx)允許外網(wǎng)用戶訪問。

PickedIP節(jié)點(diǎn)對應(yīng)IP列表,有效子節(jié)點(diǎn)包括add、remove、clear三項。以上圖為例,第一個add指示內(nèi)網(wǎng)ip為192.168.10.1、192.168.10.2、192.168.10.3、192.168.10.4、192.168.10.5五個;到第二行刪除掉192.168.10.2、192.168.10.3、192.168.10.4還剩192.168.10.1、192.168.10.5兩個;到第三行再添加上192.168.10.3,最終的內(nèi)網(wǎng)IP列表為192.168.10.1、192.168.10.3、192.168.10.5三個。

4.2. 在企業(yè)網(wǎng)站中集成

配置好DotCommonWebsiteFilter.cfg.xml中的各項參數(shù)并拷貝到網(wǎng)站根目錄。

拷貝DotCommon.WebsiteFilter.dll文件到網(wǎng)站bin目錄。

在網(wǎng)站根目錄下建立與配置文件中相對應(yīng)的錯誤提示頁(例如sorry.htm)。

修改Web.config在《httpModules》節(jié)點(diǎn)下注冊WebsiteFilter模塊,代碼如下:

以下為引用的內(nèi)容:
<httpModules>
   
<add name="WebsiteFilter" 
      type
="DotCommon.WebsiteFilterHttpModule, DotCommon.WebsiteFilter"/>
</httpModules>

分別從內(nèi)網(wǎng)、外網(wǎng)訪問企業(yè)網(wǎng)站查看運(yùn)行效果。

相關(guān)文章

最新評論

盐城市| 永昌县| 宾阳县| 文山县| 曲沃县| 新建县| 梨树县| 金川县| 宜君县| 青阳县| 维西| 延边| 邵武市| 黔西县| 河南省| 临潭县| 湘西| 佛教| 水城县| 绍兴县| 栖霞市| 本溪市| 宁强县| 咸丰县| 启东市| 亚东县| 永寿县| 焦作市| 平陆县| 新河县| 肇东市| 武功县| 呼伦贝尔市| 禹州市| 太保市| 乌拉特中旗| 宜城市| 承德县| 敖汉旗| 黔东| 正阳县|