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

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

php限制域名访问网站


方法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. 安全性

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

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

    php限制域名访问网站

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

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

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

    php限制域名访问网站


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

$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处理压力。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/289540.html

(0)
上一篇 2026年2月9日 18:27
下一篇 2026年2月9日 18:39

相关推荐

  • Chroma和Pinecone哪个更适合小项目,Chroma和Pinecone区别

    对于资源有限、追求快速部署的小项目,Chroma凭借本地化部署的零成本优势与极简API更胜一筹;若项目涉及复杂语义检索或需云端无缝扩展,Pinecone则是更稳妥的选择,在2026年的AI应用开发浪潮中,向量数据库的选择不再仅仅是技术栈的堆砌,而是对成本、性能与运维复杂度的精密平衡,小项目往往受限于人力与算力……

    2026年6月17日
    0610
  • PS4存储空间不够怎么办?原因分析+清理技巧全攻略!

    随着PS4游戏生态的持续繁荣,越来越多的玩家在享受高质量游戏体验的同时,也面临一个普遍问题——存储空间不足,无论是大型开放世界游戏还是多人在线对战游戏,PS4的内置存储往往难以满足日益增长的游戏数据需求,导致游戏安装失败、存档加载缓慢甚至系统崩溃,本文将从专业角度深入解析PS4存储空间不足的原因、优化策略,并结……

    2026年1月12日
    04270
  • 合肥滨湖宽带哪里便宜?合肥宽带价格是多少

    在2026年合肥滨湖新区,家庭与中小企业首选“合肥滨湖宽带”千兆光纤全光网方案,其综合性价比与网络稳定性已全面超越传统铜线接入,是满足4K/8K流媒体、云办公及智能家居场景的最优解,2026年合肥滨湖网络基建现状与核心优势全光网(FTTR)普及率突破95%随着国家“东数西算”工程在长三角节点的深化,合肥滨湖科学……

    2026年5月4日
    01150
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • AI编程工具对高级开发者有用吗,AI编程工具对高级开发者有用吗

    对于高级开发者而言,AI编程工具并非简单的代码补全器,而是显著重构工作流、提升架构视野与代码审查效率的“超级副驾驶”,其核心价值在于将开发者从重复性劳动中解放,专注于复杂逻辑设计与系统创新,效率重构:从“写代码”到“审代码”的范式转移在2026年的软件工程实践中,高级开发者的角色定义已发生根本性变化,根据Gar……

    2026年6月24日
    0553

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注