网站基础反爬虫之.NET Core网站添加客户端ip段过滤的实现
ip拦截网站反爬虫.Net Core爬虫过滤恶意爬虫
博客随笔
9
0 积分
网站运营到现在快10年了,基本属于为爱发电,平时没啥流量大部分还是爬虫多,最近感觉到了网站访问响应速度下降明显,所以就想着就在程序层面做下限制,过滤掉一些不太规矩的蜘蛛ip。
想当初,偶尔也会有几只爬虫过来溜达溜达,鉴于网站本来就没多少流量,它们造成的影响微乎其微,所以也就没太上心去管。一方面,平日里上班忙得晕头转向,实在抽不出精力关注;另一方面,那点儿爬虫请求量,就跟毛毛雨似的,无伤大雅。但眼瞅着现在,性能问题愈发突出(也可能跟最近升级项目框架有一点关系),服务器配置本就寒碜,哪经得住这些垃圾请求的折腾。咱这小站点,哪能跟那些声名远扬的大站相提并论,没办法,只能先把比较突出的爬虫限制住,保证正常用户的访问体验。
说说爬虫吧
小偷爬虫 这类爬虫基本就是过来爬爬内容放在自己的网站上,一般要考虑为了可持续性的内容产出,一般不会太频繁给目标网站造成太大压力,所以访问会比较有规律 这类看实际情况可管可不管,当然林子大了什么鸟都会有这里不多说。
恶意爬虫 访问的路径都是针对一些cms系统的漏洞或者赌网站维护者大意下把涉密文件放在某些目录下(用CMS系统建站的网友要格外注意)。 例子1:/admin、/admin.htm 、/query?sql= 这类检测后台登录地址或者找sql注入漏洞的 例子2: /admin.zip、/web.zip、publish.rar等 这类压缩包访问基本就是扫描那些大意的站长把网站发布程序放到了指定目录(还别说很多人这么干),一旦这些文件泄露,会发生什么因人而异。
回到正题上代码
其实服务器运营和iis本身都有提供相关的ip访问限制功能板块,不想写代码的也可以通过这些模块去限制。
IP拦截器扩展定义:
//定义ip拦截组件
public static class IpRateLimitingExtension
{
///ip拦截列表
readonly static string[] IpRateBlockeds = ["127.0.0","::1"];
/// <summary>
/// 添加ip黑名单拦截
/// </summary>
/// <param name="app"></param>
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();
试一下运行项目是不是发现本地无法访问网页了