如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
配置
<code class="language-php">'domain_whitelist' => [
'example.com',
'www.example.com',
// 添加其他允许的域名
],
</code>
方法
<code class="language-php">
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;
}
}
</code>
调用
<code class="language-php">validateHost();
</code>