|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。华能团体下某发电厂的企业网站(基于Asp.Net2.0完成,不同意修正源程序)请求完成“厂内用户可间接会见全部站点的一切页面,厂外用户只能会见指定的页面”的功效,本文将依照需求剖析、计划计划、编码完成、部署使用的按次慢慢论述全部办理计划的构成历程。择要:华能团体下某发电厂的企业网站(基于Asp.Net2.0完成,不同意修正源程序)请求完成“厂内用户可间接会见全部站点的一切页面,厂外用户只能会见指定的页面”的功效,本文将依照需求剖析、计划计划、编码完成、部署使用的按次慢慢论述全部办理计划的构成历程。
1.需求剖析
经由过程深切的交换和相同,确认了该发电厂在企业网站用户会见把持方面的改善请求,大抵情形以下:
a)网站基于Asp.Net2.0完成,不同意修正源程序
b)厂内用户可间接会见全部站点的一切页面,员工不必要身份考证
c)厂外用户只能会见指定的页面
不言而喻,他们就是针对企业网站增添一项IP过滤功效,在厂外用户会见某些敏感页面时将其拒之门外。起首我们必要设置一个IP列表和一个Url列表,前者包括一切厂内IP,后者包括厂外用户可会见的全体Url,而且这两个列表都是可保护的;别的一个中心成绩是,我们必要选择一个公道的体例将开辟好的功效模块集成到企业网站中,HttpModules当仁不让。
在Asp.Net时期,IIS吸收到哀求并将其调剂给aspnet_isapi.dll以后,ASP.NET引擎入手下手逐一对已设置的HTTP模块(HttpModules)举行初始化,然后再挪用准确的HTTP处置程序并出现被哀求的资本,最初将所天生的标志前往给IIS和哀求客户端(以下图所示)。
IIS和ASP.NET正在处置哀求假如你想懂得更多关于HttpModules的材料,请自行查阅。
2.计划计划
2.1.开辟情况
编程言语:C#2.0
开辟工具:VisualStudio.NET2008
操纵体系:windows2003R2
2.2.提要计划
利用HttpModules完成IP过滤功效的中心头脑是:自界说一个HttpModule捕捉每个用户哀求,然后猎取相干的用户IP和被哀求的Url举行逻辑判别,将未受权的哀求重定向到一个毛病提醒页。Http哀求受权与否的判别逻辑为:
1)判别哀求是不是来自当地盘算机,是则主动疏忽,不然持续;
2)判别用户IP是不是属于内网(IP列表),是则疏忽,不然持续;
3)判别被哀求Url是不是受权一切用户会见,是则疏忽,不然持续;
4)将哀求重定向到毛病提醒页。
在HttpApplication的BeginRequest事务中附加自界说的处置程序便可完成Http哀求的捕捉。别的,为了便于保护我们应将程序运转必要的各项参数(IP列表、Url列表、毛病提醒页路径等等)存储于特定的XML设置文件中,为了进步效力,我们还必要将设置文件实行内存级的缓存处置并对IP、Url婚配算法举行得当的优化。
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#源码下载,以是本节仅对源码紧缩包中的次要文件举行扼要申明:
DotCommon.WebsiteFilter
│DotCommonWebsiteFilter.cfg.xml
│WebsiteFilterConfiguration.cs
│WebsiteFilterHttpModule.cs
├─Util
│GlobesCache.cs
│XmlAttributeReader.cs
└─WebsiteFilter
IPMatchEngine.cs
UrlMatchCondition.cs
UrlMatchEngine.cs
- 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婚配引擎
WebsiteFilterHttpModule.cs中BeginRequest自界说处置程序的中心代码以下:
voidcontext_BeginRequest(objectsender,EventArgse)
{
if(HttpContext.Current.Request.IsLocal)//疏忽当地盘算机哀求
return;
stringip=HttpContext.Current.Request.UserHostAddress;
if(!WebsiteFilterConfiguration.GetConfig().PickedIPs.IsMatch(ip))
{//若在IP列表中找不到访客ip
stringrawUrl=HttpContext.Current.Request.RawUrl;
UrlMatchEnginepu=WebsiteFilterConfiguration.GetConfig().PickedUrls;
//列表包括以后url且列表为黑名单、列表不包括以后url且列表不为黑名单时需转向
//换而言之,“装备了局”与“是不是黑名单”取值分歧时需转向
if(pu.IsMatch(rawUrl)==pu.IsBlacklist)
{//非公然url主动重定向
HttpContext.Current.Response.Redirect(pu.ErrorPage);
}
}
}
4.部署使用
4.1.DotCommonWebsiteFilter.cfg.xml设置文件
设置文件的根节点为DotCommon,一切设置信息均为WebsiteFilter节点的子项。PickedUrl节点对应Url列表,IsBlacklist(1是0否)唆使是不是为黑名单,ErrorPage指定毛病提醒页路径,其子节点add可反复呈现,经由过程pattern属性指定正则表达式文本,上图所示设置暗示仅网站首页(default.aspx)同意外网用户会见。
PickedIP节点对应IP列表,无效子节点包含add、remove、clear三项。以上图为例,第一个add唆使内网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,终极的内网IP列表为192.168.10.1、192.168.10.3、192.168.10.5三个。
4.2.在企业网站中集成
- 设置好DotCommonWebsiteFilter.cfg.xml中的各项参数并拷贝到网站根目次。
- 拷贝DotCommon.WebsiteFilter.dll文件到网站bin目次。
- 在网站根目次下创建与设置文件中绝对应的毛病提醒页(比方sorry.htm)。
- 修正Web.config在<httpModules>节点下注册WebsiteFilter模块,代码以下:
<httpModules>
<addname="WebsiteFilter"
type="DotCommon.WebsiteFilterHttpModule,DotCommon.WebsiteFilter"/>
</httpModules>
- 分离从内网、外网会见企业网站检察运转效果。
停止语
本文仅针对详细需求论述办理计划的构想历程,但愿对读者能有所匡助,接待提出改善定见。
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。 |
|