限时免费试用:欢迎注册 api.bigmodel.org ,快速体验大模型 API 接入服务。
当前位置:首页 >网站技术

在php处理HTTP Host头的风险,

分类:网站技术时间:2024-10-12浏览:823

配置

'domain_whitelist' => [
        'example.com',
        'www.example.com',
        // 添加其他允许的域名
    ],

方法


function validateHost()
{
    try {
        // 获取当前请求的host
        $host = request()->host(true);

        // 如果host为空,记录日志并抛出异常
        if (empty($host)) {
            dd('无效的Host');
        }

        // 获取域名白名单
        $whitelist = Config::get('app.domain_whitelist', []);

        // 如果白名单为空,记录日志并抛出异常
        if (empty($whitelist)) {
            Log::warning('域名白名单为空');
            dd('域名白名单配置错误');
        }

        // 将host转换为小写进行比较
        $host = strtolower($host);

        // 检查host是否在白名单中
        if (!in_array($host, array_map('strtolower', $whitelist))) {
            // 记录非法Host的访问
            // Log::warning("检测到非法Host: {$host}");
            dd('非法的Host');
        }

        // 可选:检查是否使用HTTPS
        // if (!request()->isSsl()) {
        //     Log::warning("非HTTPS请求: {$host}");
        //     dd('必须使用HTTPS访问');
        // }

        // 可选:检查是否存在X-Forwarded-Host头,并进行验证
        $forwardedHost = request()->header('X-Forwarded-Host');
        if ($forwardedHost && strtolower($forwardedHost) !== $host) {
            // Log::warning("X-Forwarded-Host不匹配: {$forwardedHost}");
            dd('非法的X-Forwarded-Host');
        }

        // Host验证通过
        Log::info("Host验证通过: {$host}");
    } catch (Exception $e) {
        // 记录异常

        // 重新抛出异常
        throw $e;
    }
}

调用

validateHost();
本站文章如未注明出处均为原创,转载请注明出处,如有侵权请邮件联系站长。
0/500
Share your thoughts respectfully.