You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core网站如何防范恶意URL循环爬取?

防止ASP.NET Core网站被URL遍历爬取的实用方案

你的网站URL包含自增数字ID(如24),很容易被攻击者循环遍历爬取数据,下面是针对性的解决思路和ASP.NET Core可用的实现方式:

一、IP限流但避开合法爬虫

你提到的IP限流思路可行,但需要区分正常用户和合法搜索引擎爬虫,避免误拦:

  • 识别合法爬虫:检查请求头的User-Agent,谷歌爬虫UA格式为Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),Bing、百度爬虫也有固定的UA标识,可将这些加入白名单,限流规则不对其生效。
  • ASP.NET Core实现方式:
    1. 内置RateLimiter(.NET 7+):直接用官方限流中间件,自定义拒绝逻辑时放行爬虫:
      builder.Services.AddRateLimiter(options =>
      {
          options.AddFixedWindowLimiter("specs-limit", opt =>
          {
              opt.PermitLimit = 2; // 5秒内最多2次请求
              opt.Window = TimeSpan.FromSeconds(5);
              opt.QueueLimit = 0; // 不排队,直接拒绝超额请求
          });
          options.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
          options.OnRejected = async (context, token) =>
          {
              var userAgent = context.HttpContext.Request.Headers.UserAgent.ToString();
              // 放行谷歌、Bing等合法爬虫
              if (userAgent.Contains("Googlebot") || userAgent.Contains("Bingbot"))
              {
                  context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
                  return;
              }
              await context.HttpContext.Response.WriteAsync("请求过于频繁,请稍后再试", token);
          };
      });
      
      // 在管道中注册限流中间件(注意顺序,要在路由之前)
      app.UseRateLimiter();
      
    2. AspNetCoreRateLimit库:功能更灵活,支持在配置文件中设置IP白名单、限流规则:
      先在appsettings.json中配置:
      "IpRateLimiting": {
        "EnableEndpointRateLimiting": true,
        "HttpStatusCode": 429,
        "IpWhitelist": [], // 可添加已知爬虫IP段
        "GeneralRules": [
          {
            "Endpoint": "get:/specs/*",
            "Period": "5s",
            "Limit": 2
          }
        ]
      }
      
      再在Startup中注册服务和中间件,同时可通过自定义逻辑扩展UA白名单。

二、修改URL结构,增加遍历难度

针对当前URL的数字ID易被遍历的问题,可从根源上优化:

  • 替换自增ID为随机标识:把数字ID换成UUID或随机字符串,比如https://test.com/specs/xyZ789/panasonic-24-inch,攻击者无法通过递增数字猜测合法URL。
  • 给ID添加签名校验:在URL中增加一个基于ID生成的签名串,比如https://test.com/specs/24/abc123/panasonic-24-inch,服务器收到请求后,用相同的算法(如HMAC)重新计算签名,与URL中的签名比对,不匹配则返回404。

三、其他辅助防范手段

  • 人机验证:对短时间内请求多个不同ID的IP,弹出验证码(如reCAPTCHA),或用隐式验证(检查Referer头,正常用户通常从站内链接跳转)。
  • 动态加载内容:把核心数据通过AJAX异步加载,而非直接渲染在HTML中,普通爬虫因无法执行JS难以获取数据(注意:谷歌爬虫能解析JS,不影响SEO)。
  • 日志与告警:记录所有请求的IP、UA、路径,设置异常告警规则(如1分钟内请求100个不同ID),及时发现并处理恶意爬取。
  • Robots.txt声明:在网站根目录添加robots.txt,告诉合法爬虫不要爬取/specs/路径,但恶意爬虫会忽略此规则,仅作为辅助手段:
    User-Agent: *
    Disallow: /specs/*
    

四、避免误拦谷歌爬虫的额外技巧

除了UA校验,还可以:

  • 直接将谷歌公开的爬虫IP段加入白名单(谷歌官方会公布这些IP范围)。
  • 通过Google Search Console验证网站,确保爬虫能正常访问,若出现抓取异常可及时排查。

内容的提问来源于stack exchange,提问作者Prageeth Liyanage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:55:05