欢迎光临
感谢一路有你

在php处理HTTP Host头的风险,

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

配置

'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) 打赏
未经允许不得转载:王明昌博客 » 在php处理HTTP Host头的风险,
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮