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

如何阻止HTTrack等工具爬取下载Laravel网站?

阻止HTTrack及类似爬虫工具爬取Laravel网站的方法

1. 拦截违规爬虫的User-Agent

HTTrack这类下载工具大多不会遵守robots.txt协议,直接通过中间件检测并拦截其UA是更有效的方式:

  • 创建自定义中间件(比如BlockBadCrawlers),在handle方法中添加UA检测逻辑:
public function handle(Request $request, Closure $next)
{
    $blockedAgents = [
        'HTTrack',
        'httrack',
        'Wget',
        'curl' // 根据实际需要调整,避免误拦正常请求
    ];

    $userAgent = strtolower($request->header('User-Agent'));
    foreach ($blockedAgents as $agent) {
        if (str_contains($userAgent, strtolower($agent))) {
            abort(403, 'Access Denied');
        }
    }

    return $next($request);
}
  • 将中间件注册到app/Http/Kernel.php的全局中间件或特定路由组中,让所有请求都经过检测。

2. 限制请求频率

爬虫工具通常会高频批量请求,利用Laravel的限流功能限制单IP请求次数:
在RouteServiceProvider中配置限流规则:

protected function configureRateLimiting()
{
    RateLimiter::for('web', function (Request $request) {
        return Limit::perMinute(60)->by($request->ip());
    });
}

根据网站实际访问量调整频率阈值,防止爬虫快速下载内容。

3. 检测异常请求模式

爬虫的请求行为和正常用户差异明显,可通过中间件记录请求间隔,对异常IP临时封禁:

$ip = $request->ip();
$lastRequestTime = Cache::get('last_request_' . $ip);

// 若两次请求间隔小于1秒,判定为异常爬虫
if ($lastRequestTime && now()->diffInSeconds($lastRequestTime) < 1) {
    Cache::put('blocked_ip_' . $ip, true, now()->addMinutes(10));
    abort(403);
}

// 记录当前请求时间
Cache::put('last_request_' . $ip, now(), now()->addMinutes(5));

// 检查IP是否被临时封禁
if (Cache::get('blocked_ip_' . $ip)) {
    abort(403);
}

4. 隐藏敏感内容(可选)

对核心内容设置访问权限,比如要求用户登录才能查看,或使用动态生成的加密路由参数,让爬虫无法直接遍历页面链接。

5. 修正robots.txt(辅助作用)

虽然HTTrack不会遵守,但可以调整规则避免合规爬虫被误拦,同时明确禁止其他爬虫:

User-agent: HTTrack
Disallow: /
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
User-agent: *
Disallow: /

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:23:24