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

如何在Laravel 9中有效防范Host Header Attack(主机头攻击)

Laravel 9 防范主机头攻击的解决方案

一、排查自定义中间件未触发的原因

  • 调整中间件注册顺序:在app/Http/Kernel.php中,将自定义的HostHeaderValidationMiddleware放在web中间件组的最前端,确保请求在进入路由匹配、认证逻辑前先经过主机头校验:
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\HostHeaderValidationMiddleware::class,
        \App\Http\Middleware\TrustHosts::class,
        // 其他中间件...
    ],
];
  • 修正中间件逻辑:确保自定义中间件的校验逻辑正确,非法主机直接拦截:
public function handle(Request $request, Closure $next)
{
    $allowedHosts = ['yourdomain.com', 'www.yourdomain.com', '127.0.0.1:8000'];
    $requestHost = $request->getHost();

    if (!in_array($requestHost, $allowedHosts)) {
        abort(403, 'Invalid Host Header');
    }

    return $next($request);
}

二、Laravel 层面的强化防范方法

1. 正确配置 TrustHosts 中间件

打开app/Http/Middleware/TrustHosts.php,明确指定允许的主机列表,非法请求会直接返回403:

public function hosts()
{
    return [
        'yourdomain.com',
        'www.yourdomain.com',
        '127.0.0.1:8000', // 本地开发环境
    ];
}

2. 强制URL生成使用固定主机

Laravel默认会用请求Host生成重定向URL(比如登录跳转),可通过以下方式强制使用正确域名:

  • 在.env中设置固定域名:
APP_URL=https://yourdomain.com
  • 在AppServiceProvider的boot方法中强制指定URL根地址:
use Illuminate\Support\Facades\URL;

public function boot()
{
    URL::forceRootUrl(config('app.url'));
    // 如需强制HTTPS,可添加:URL::forceScheme('https');
}

3. 路由层面添加主机约束

给路由组绑定允许的主机,非法主机请求直接返回404:

Route::domain('yourdomain.com')->group(function () {
    // 业务路由
});

// 本地开发环境单独配置
if (app()->isLocal()) {
    Route::domain('127.0.0.1:8000')->group(function () {
        // 本地路由
    });
}

三、PHP 层面的前置拦截

在public/index.php最开头添加校验,Laravel启动前就阻断非法请求:

$allowedHosts = ['yourdomain.com', 'www.yourdomain.com', '127.0.0.1:8000'];
$requestHost = $_SERVER['HTTP_HOST'] ?? '';

if (!in_array($requestHost, $allowedHosts)) {
    http_response_code(403);
    echo 'Invalid Host Header';
    exit;
}

// 后续Laravel启动代码...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:58:39