.NET环境下为网站增加IP过滤功能(2)

http://www.itjxue.com  2015-07-17 01:58  来源:未知  点击次数: 

2.3. 配置缓存算法

配置文件的缓存参照微软CommonServer项目中的实现逻辑,将配置信息持久化为实体类存储于HttpContext.Current.Cache中,配置文件发生后缓存信息将自动清空,下次访问时再次执行持久化操作,不需重启站点。本文对CommonServer的缓存逻辑不做深入探讨,感兴趣者可自行搜索相关资料。

2.4. IP列表算法

通过上文可知,当前项目用到的IP列表包含的数据量非常有限,就是电厂web服务器可有效识别的内网IP的穷举。

因而我们将整个IP列表缓存,使用时直接检索当前用户IP是否存在于列表之中即可。在具体IP的存储方面,我们可将其视作256进制,将IP字符串转换为数字格式(例如:192.168.10.3可视作192*256*256*256+168*256*256+10*256+3=3232238083,不考虑IPV6);在参数配置的格式方面,我们应同时支持单个IP或IP段的方式增删IP列表。

2.5. Url列表算法

就具体需求而言,Url列表是一个授权外网用户访问的白名单,换个说法,“对外网用户而言除了在列表之中的其他都不可访问”,一旦数据的安全级别降低,会不会出现“对外网用户而言除了列表之中的其他都可以访问”的情况出现呢?为了兼容这种后续场景,我们需要为Url列表定义一个“是否黑名单”(IsBlacklist)的附加参数;另外,对于动态网站穷举Url显然是不现实的,不管是维护黑名单还是白名单,所以我们可以转变一下思路,更改最终Url为正则表达式,即:维护一个可匹配目标Url的正则表达式列表,针对用户请求的具体Url逐个正则表达式执行匹配操作,只要有一个匹配成功则认为当前Url存在于Url列表之中。

3. 编码实现

由于本文提供全部的c#源码下载,所以本节仅对源码压缩包中的主要文件进行简要说明:

DotCommonWebsiteFilter.cfg.xml

运行参数配置文件

WebsiteFilterConfiguration.cs

配置文件实体类

WebsiteFilterHttpModule.cs

实现了System.Web.IHttpModule接口的自定义Http模块

GlobesCache.cs

全局缓存操控类

XmlAttributeReader.cs

xml节点属性读取器

IPMatchEngine.cs

IP匹配引擎

UrlMatchCondition.cs

Url匹配条件(与正则表达式匹配)

UrlMatchEngine.cs

Url匹配引擎

(责任编辑:IT教学网)

更多

推荐ASP.NET教程文章