当前位置:首页 > 云服务器 > 正文

PHP如何实现只允许特定域名访问网站?域名访问限制技巧

在PHP中限制特定域名访问网站,可以通过检查HTTP请求头中的HTTP_REFERER或HTTP_ORIGIN字段实现,以下是两种常用方法:


方法1:验证 Referer(适用于页面跳转)

// 允许访问的域名列表 $allowedDomains = [ 'example.com', 'subdomain.example.com' ]; // 获取Referer并提取域名 $referer = $_SERVER['HTTP_REFERER'] ?? ''; $domain = parse_url($referer, PHP_URL_HOST); // 验证 if (empty($referer) || !in_array($domain, $allowedDomains)) { http_response_code(403); // 禁止访问 exit('Access Denied: Domain not allowed.'); } // 正常执行业务代码...


方法2:验证 Origin(适用于AJAX/API请求)

// 允许访问的域名列表 $allowedOrigins = [ 'https://example.com', 'https://subdomain.example.com' ]; // 获取Origin头 $origin = $_SERVER['HTTP_ORIGIN'] ?? ''; // 验证 if (!in_array($origin, $allowedOrigins)) { http_response_code(403); exit('Access Denied: Invalid origin.'); } // 可选:设置CORS响应头(用于AJAX) header("Access-Control-Allow-Origin: $origin"); header("Access-Control-Allow-Credentials: true");


重要注意事项:

  1. 安全性

    PHP如何实现只允许特定域名访问网站?域名访问限制技巧 第1张

    • Referer和Origin可被杜撰,不能依赖其做敏感操作的安全验证
    • 关键操作(如支付、账户修改)应使用服务端会话(Session)或Token验证。
  2. 适用场景

    • Referer:普通页面跳转、资源防盗链(图片/文件)。
    • Origin:AJAX请求、API接口跨域控制。
    • 直接访问处理

      PHP如何实现只允许特定域名访问网站?域名访问限制技巧 第2张

      • 直接输入URL访问时Referer为空,需根据需求决定是否允许(示例代码中禁止了空Referer)。
      • 通配符支持

        PHP如何实现只允许特定域名访问网站?域名访问限制技巧 第3张

        • 如需泛域名匹配(如*.example.com),可用正则: $pattern = '/.example.com$/'; if (!preg_match($pattern, $domain)) { ... }
        • 性能优化

          将域名列表缓存或存储在配置文件中,避免每次请求重复定义。

        • 完整示例(结合两种方法):

          $allowedDomains = ['example.com', 'api.example.com']; $refererDomain = parse_url($_SERVER['HTTP_REFERER'] ?? '', PHP_URL_HOST); $origin = $_SERVER['HTTP_ORIGIN'] ?? ''; // 验证Referer(非AJAX)或Origin(AJAX) $isValid = in_array($refererDomain, $allowedDomains) || in_array(parse_url($origin, PHP_URL_HOST), $allowedDomains); if (!$isValid) { http_response_code(403); exit('Domain not permitted.'); }

          提示:对于生产环境,建议结合Web服务器(如Nginx/Apache)的访问控制,效率更高且减少PHP处理压力。

0