PHP 来源域名判断是指通过 PHP 代码获取并验证当前请求的来源域名。这在很多场景下非常有用,例如防止跨站请求伪造(CSRF)、限制访问来源、统计分析等。
HTTP_REFERER
或其他相关 HTTP 头部信息来获取来源域名。HTTP_REFERER
头部信息有时会为空?原因:
HTTP_REFERER
头部信息。meta
标签或 JavaScript 代码清除了 HTTP_REFERER
头部信息。解决方法:
解决方法:
可以使用 PHP 的 gethostbyaddr
函数将 IP 地址转换为域名。
$ip = $_SERVER['REMOTE_ADDR'];
$domain = gethostbyaddr($ip);
echo $domain;
但需要注意的是,IP 反向解析可能并不总是能返回有效的域名,尤其是对于使用代理或负载均衡的场景。
以下是一个简单的示例,展示如何通过 HTTP_REFERER
和 IP 地址获取来源域名,并进行基本的验证:
<?php
// 获取 HTTP_REFERER 头部信息
$referer = $_SERVER['HTTP_REFERER'] ?? '';
// 获取 IP 地址
$ip = $_SERVER['REMOTE_ADDR'];
// 尝试通过 IP 地址获取域名
try {
$domainFromIp = gethostbyaddr($ip);
} catch (Exception $e) {
$domainFromIp = 'Unknown';
}
// 输出结果
echo "Referer: " . htmlspecialchars($referer) . "\n";
echo "Domain from IP: " . htmlspecialchars($domainFromIp) . "\n";
// 基本的验证逻辑
$allowedDomains = ['example.com', 'anotherdomain.com'];
$refererDomain = parse_url($referer, PHP_URL_HOST);
if (!empty($refererDomain) && in_array($refererDomain, $allowedDomains)) {
echo "Access granted from " . $refererDomain . "\n";
} else {
echo "Access denied\n";
}
?>
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云