网站基础反爬虫之.NET Core网站添加客户端ip段过滤的实现

博客随笔
24
ip拦截
网站反爬虫
.Net Core
爬虫过滤
恶意爬虫

网站运营到现在快10年了,基本属于为爱发电,平时没啥流量大部分还是爬虫多,最近感觉到了网站访问响应速度下降明显,所以就想着就在程序层面做下限制,过滤掉一些不太规矩的蜘蛛ip。

想当初,偶尔也会有几只爬虫过来溜达溜达,鉴于网站本来就没多少流量(博客内容比较水),同时它们造成的影响也比较小,所以也就没太上心去管。 一方面,平日里上班忙得晕头转向,实在抽不出精力关注;另一方面,那点儿爬虫请求量,多它不多少它不少,无伤大雅。但眼瞅着近期,性能问题愈发突出(也可能跟最近升级项目Blazor框架有一点关系),服务器配置本就寒碜,哪经得住这些垃圾请求的折腾。个人小站点没啥好办法,比不了那些大站,只能先把比较突出的爬虫限制住,尽量保证正常用户的访问体验。

基础反爬虫之基础的.NET Core网站添加ip段过滤的实现代码

说说爬虫吧

  1. 小偷爬虫 这类爬虫基本就是过来爬爬内容放在自己的网站上,一般要考虑为了可持续性的内容产出,一般不会太频繁给目标网站造成太大压力,所以访问会比较有规律 这类看实际情况可管可不管,当然林子大了什么鸟都会有这里不多说。

  2. 恶意爬虫 访问的路径都是针对一些cms系统的漏洞或者赌网站维护者大意下把涉密文件放在某些目录下(用CMS系统建站的网友要格外注意)。 例子1:/admin、/admin.htm 、/query?sql= 这类检测后台登录地址或者找sql注入漏洞的 例子2: /admin.zip、/web.zip、publish.rar等 这类压缩包访问基本就是扫描那些大意的站长把网站发布程序放到了指定目录(还别说很多人这么干),一旦这些文件泄露,会发生什么因人而异。

回到正题上代码

其实Windows服务器运营和iis本身都有提供相关的ip访问限制功能板块,不想写代码的也可以通过这些模块去限制。

IP拦截器扩展定义:

//定义ip拦截组件
public static class IpRateLimitingExtension
{
     ///ip拦截列表
     readonly static string[] IpRateBlockeds = ["127.0.0.1","::1"];
     /// 
     /// 添加ip黑名单拦截
     /// 
     /// 
     public static void UseIpRateLimiting(this IApplicationBuilder app)
     {
         if (IpRateBlockeds.HasItems())
         {
             app.Use(next => async context =>
             {
                 var ip = context.Connection.RemoteIpAddress.IsIPv4MappedToIPv6? context.Connection.RemoteIpAddress.MapToIPv4().ToString(): context.Connection.RemoteIpAddress.ToString();
                 if (IpRateBlockeds.Any(e => e.StartsWith(ip)))
                 {
                     context.Response.StatusCode = 302; // Forbidden
                     await context.Response.WriteAsync("IP address is blocked.");
                 }
                 else
                 {
                     await next(context);
                 }
             });
         }
     }
}

在Program.cs中引用

app.UseIpRateLimiting();

试一下运行项目是不是发现本地【127.0.0.1】无法访问网页了

暂无相关内容...
暂无相关内容...
暂无相关内容...
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删