如何阻止他人在其网站设置通配符重定向指向我的PHP站点?
阻止第三方通配符重定向到你的PHP站点
你可以通过.htaccess(Apache服务器)或PHP代码实现需求,核心思路是识别来自恶意域名的跳转请求并直接拒绝,避免触发无限循环:
一、使用.htaccess(Apache环境)
通过检查请求的Referer头判断来源,对恶意域名的请求返回403禁止访问:
RewriteEngine On # 匹配所有来自malicious-domain.com及其子域名的跳转请求(替换为实际要阻止的域名) RewriteCond %{HTTP_REFERER} ^https?://.*malicious-domain\.com [NC] # 返回403错误并终止请求 RewriteRule ^ - [F,L]
[NC]表示忽略大小写匹配[F]标记返回403 Forbidden,[L]表示停止后续规则执行
二、使用PHP代码处理
在站点入口文件(如index.php)开头添加以下代码,识别恶意来源并终止请求:
// 定义需要阻止的恶意域名列表(支持通配符子域名) $blockedDomains = [ 'malicious-domain.com', '*.malicious-domain.com' ]; $referer = $_SERVER['HTTP_REFERER'] ?? ''; $isBlocked = false; if (!empty($referer)) { $refererHost = parse_url($referer, PHP_URL_HOST); foreach ($blockedDomains as $domain) { // 匹配通配符子域名 if (str_starts_with($domain, '*.') && str_ends_with($refererHost, substr($domain, 1))) { $isBlocked = true; break; } // 匹配精确域名 elseif ($refererHost === $domain) { $isBlocked = true; break; } } } if ($isBlocked) { http_response_code(403); echo "Access Denied"; exit; }
注意事项
Referer头可能被部分浏览器禁用或伪造,这种方法无法覆盖所有极端场景,但能拦截绝大多数常规重定向请求;- 若对方使用反向代理而非3xx跳转,可额外检查
X-Forwarded-Host等代理头,逻辑与上述代码一致; - 绝对避免通过重定向回恶意域名的方式处理,这会导致浏览器陷入无限循环,直接返回错误是更安全的方案。
内容的提问来源于stack exchange,提问作者Jam
相关产品推荐
相关产品推荐

