一种基于自定义代码的asp.net网站访问IP过滤方法!
对于一些企业内部核心系统,特别是外网访问的时候,为了信息安全,可能需要对外部访问的IP地址作限制,虽然IIS中也提供了根据IP地址或IP地址段进行限制或允许,但并没有提供根据IP地址所在的城市进行限制或允许。本文主要通过自定义扩展IHttpModule接口,考虑到性能IP数据库主要采用QQwry纯真IP数据库(但此数据库并非是官方的,我之前与ip138网站对比过,IP地址信息的准确性大概在90%左右),主要实现不仅可以根据IP地址或IP地址段进行限制或允许(与IIS的功能相同),而且可以根据IP地址的所在城市进行限制或允许。该WebsiteFilter组件核心代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Xml;
using System.IO;
using System.Net;
using NetOpen_System.Component.QQWry; namespace NetOpen_System.Component
{
public sealed class WebsiteFilterHttpModule : IHttpModule
{
#region IHttpModule 成员 public void Dispose()
{
} public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
} #endregion void context_BeginRequest(object sender, EventArgs e)
{
try
{
//HttpApplication objApp = (HttpApplication)sender; if (HttpContext.Current.Request.IsLocal)//忽略本地计算机请求
return; string ip = HttpContext.Current.Request.UserHostAddress; QQWryLocator qqWry = new QQWryLocator(HttpContext.Current.Server.MapPath(@"~\IpData\qqwry.dat")); IPLocation ipaddress = qqWry.Query(ip); //查询一个IP地址 UrlMatchEngine pu = WebsiteFilterConfiguration.GetConfig().PickedUrls; if (string.IsNullOrEmpty(pu.CitySiteList) == false)
{
if (pu.CitySiteList.Contains(ipaddress.Country) == false)
{ if (!WebsiteFilterConfiguration.GetConfig().IpChecks.GetIpIn(ip))
{ //若在IP列表中找不到访客ip //string rawUrl = HttpContext.Current.Request.RawUrl;
//UrlMatchEngine pu = WebsiteFilterConfiguration.GetConfig().PickedUrls; ////列表包含当前url且列表为黑名单、列表不包含当前url且列表不为黑名单 时需转向
////换而言之,“配备结果”与“是否黑名单”取值一致时需转向
//if (pu.IsMatch(rawUrl) == pu.IsBlacklist)
//{ //非公开url自动重定向
// HttpContext.Current.Response.Redirect(pu.ErrorPage);
//}
HttpContext.Current.Response.Redirect(pu.ErrorPage, true);
//HttpContext.Current.Server.Transfer(pu.ErrorPage); }
else
{
return;
}
}
else
{
return;
}
}
else
{
if (!WebsiteFilterConfiguration.GetConfig().IpChecks.GetIpIn(ip))
{ //若在IP列表中找不到访客ip //string rawUrl = HttpContext.Current.Request.RawUrl;
//UrlMatchEngine pu = WebsiteFilterConfiguration.GetConfig().PickedUrls; ////列表包含当前url且列表为黑名单、列表不包含当前url且列表不为黑名单 时需转向
////换而言之,“配备结果”与“是否黑名单”取值一致时需转向
//if (pu.IsMatch(rawUrl) == pu.IsBlacklist)
//{ //非公开url自动重定向
// HttpContext.Current.Response.Redirect(pu.ErrorPage);
//}
HttpContext.Current.Response.Redirect(pu.ErrorPage, true);
//HttpContext.Current.Server.Transfer(pu.ErrorPage);
}
else
{
return;
}
}
}
catch
{ }
}
}
}
在部署方面,非常简单主要利用IHttpModule接口并在Web.config中的HttpModule节点添加此组件的配置,访问限制或允许参数可以在NetOpen_SystemWebsiteFilter.cfg.xml进行设置,以下为一个简单的配置示例;
<?xml version="1.0" encoding="utf-8" ?>
<NetOpen_System>
<WebsiteFilter>
<PickedUrl IsBlacklist="0" ErrorPage="~/sorry.htm" CitySiteList="浙江省宁波市,浙江省杭州市">
<add pattern="^~/default.aspx"/>
</PickedUrl>
<PickedIP>
<add ip1="192.168.10.1" ip2="192.168.10.5" />
<remove ip1="192.168.10.2" ip2="192.168.10.4" />
<add ip1="192.168.10.3" />
</PickedIP>
</WebsiteFilter>
</NetOpen_System>
该组件源代码下载地址:https://websitefilter.codeplex.com/,欢迎访问下载!虽然该组件实现并不复杂,原理也很简单,但较为实用,后续将增加根据IP138的网站进行实时查询,这样IP地址信息将更为精确,但对性能可能会有一些影响。
|
本博客为软件人生原创,欢迎转载,转载请标明出处:http://www.cnblogs.com/nbpowerboy/p/3160134.html。演绎或用于商业目的,但是必须保留本文的署名软件人生(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。SharePoint商业智能技术QQ群:140668362,.Net技术交流QQ群:195516928,欢迎各位加入交流。 |
一种基于自定义代码的asp.net网站访问IP过滤方法!的更多相关文章
- 一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法!
一种基于自定义代码的asp.net网站首页根据IP自动跳转指定页面的方法! 对于大中型网站,为了增强用户体验,往往需要根据不同城市站点的用户推送或展现相应个性化的内容,如对于一些大型门户网站的新闻会有 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法
阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法 [转]
不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...
- 不修改代码优化 ASP.NET 网站性能的一些方法
本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 配置OutputCach ...
- 26种提高ASP.NET网站访问性能的优化方法 .
1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...
- 调试ASP.NET网站IIS环境问题解决方法汇总
调试网站时出现错误,错误如下: 1. 分析器错误消息: 创建 RewriterConfig 的配置节处理程序时出错: 无法生成临时类(result=1).error CS2001: 未能找到源文件“C ...
- 论一种基于JS技术的WEB前端动态生成框图的方法
前言 HTML是一种标记语言,由HTML的标签元素和文本编写的文档可被浏览器描述为一幅网页.通常情况下网页的实现是由HTML.CSS和Javascript三者结合完成的,HTML负责网页的结构,CSS ...
- asp.net 网站访问变慢
资料一 单个网站解决方法: 把应用程序池回收时间缩短到300-600分钟,其间回收过程中,需要占用一点CPU资源,没办法,为了稳定性,再把回收时间设为凌晨5点. 多网站解决方法: 视服务器网站的多 ...
- Asp.Net 网站访问人数及在线人数
利用Application对象和Session对象可以统计历史访问人数和当前在线人数. 在会话开始和结束时,一定要进行加锁和解锁操作.由于多个用户可以共享Application对象,因此加锁是必要的, ...
随机推荐
- GroupCoordinator joingroup源码解析
转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/7463693.html kafka新版consumer所有的group管理工作在服务端都由Group ...
- Nodejs各种功能Module的收集整理
收集整理接触过的各种常用的nodejs modules,不断更新~~~ ================================================================ ...
- jvisualvm远程调试
远程服务器端 (1)设置jstatd.all.policy 文件 grant codebase "file:${java.home}/../lib/tools.jar" { per ...
- jq和thinkphp经常使用的几种ajax
第一种方法 第二种方法 jquery方法: MessageAction.class.php <?php class MessageAction extends Action{ functio ...
- freemark 页面静态化
1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...
- Editor编辑器的一些用法
共有两个脚本,一个是有关Inspector面板的,一个是window的 using UnityEngine; using System.Collections; using UnityEditor; ...
- MySQL的下载及安装
前言:不仅要知其然,还要知所以然 MySQL数据库作为关系型数据库中的佼佼者,因其体积小,速度快,成本低,不仅受到了市场的极大追捧,也受到了广大程序员的青睐.接下来,就给大家说一下,MySQL的下载和 ...
- lumen-Permission 权限管理使用心得
安装 composer require spatie/laravel-permission github上有详细介绍:https://github.com/spatie/laravel-permiss ...
- xshell ftp报错:找不到匹配的outgoing encryption算法
场景:由于登陆跳板机都是从采用密钥的方式进行登陆的,然后在传输文件的时候报错 报错信息: 解决方案: 点击属性--->选择aes256-ctr加密方式默认这里是没有选择的 再次连接就成功连接上去 ...
- Handler classes should be static or leaks might occur
http://droidyue.com/blog/2014/12/28/in-android-handler-classes-should-be-static-or-leaks-might-occur ...