php实现域名授权
PHP 实现域名授权的方法
获取当前访问域名
使用 $_SERVER['HTTP_HOST'] 或 $_SERVER['SERVER_NAME'] 获取当前访问的域名。建议优先使用 HTTP_HOST,因为它能正确反映客户端请求的域名。
$current_domain = $_SERVER['HTTP_HOST'];
定义授权域名列表
将允许访问的域名存储在数组中,便于后续验证。
$allowed_domains = [
'example.com',
'sub.example.com',
'another-domain.com'
];
域名验证逻辑
检查当前域名是否在授权列表中。可以使用 in_array 进行简单验证。
if (!in_array($current_domain, $allowed_domains)) {
header('HTTP/1.1 403 Forbidden');
exit('Access denied: Unauthorized domain');
}
支持通配符子域名
如果需要支持类似 *.example.com 的通配符匹配,可以使用正则表达式。
$is_allowed = false;
foreach ($allowed_domains as $pattern) {
if (fnmatch($pattern, $current_domain)) {
$is_allowed = true;
break;
}
}
增强安全性
考虑将授权域名存储在数据库或配置文件中,避免硬编码。同时可以添加 IP 验证等其他安全层。
$config = parse_ini_file('config.ini', true);
$allowed_domains = $config['security']['allowed_domains'];
完整示例代码
以下是一个结合上述方法的完整实现示例:

<?php
// 获取当前域名
$current_domain = $_SERVER['HTTP_HOST'];
// 授权域名列表(可从数据库或配置文件加载)
$allowed_domains = [
'example.com',
'*.example.com',
'trusted-site.net'
];
// 验证逻辑
$access_granted = false;
foreach ($allowed_domains as $pattern) {
if (fnmatch($pattern, $current_domain)) {
$access_granted = true;
break;
}
}
// 处理未授权访问
if (!$access_granted) {
http_response_code(403);
die("Unauthorized domain access: $current_domain");
}
// 授权通过后的正常业务逻辑
echo "Welcome from $current_domain";
?>
注意事项
- 确保服务器正确配置,防止
HTTP_HOST被伪造 - 在生产环境中,建议结合 SSL/TLS 使用
- 定期审核授权域名列表
- 考虑实现域名授权的缓存机制以提高性能






