当前位置:首页 > PHP

php实现域名授权

2026-01-30 07:59:29PHP

域名授权的基本原理

域名授权通常用于限制PHP脚本只能在特定域名下运行,防止未经授权的域名调用脚本。实现方式包括验证HTTP请求中的域名信息、服务器变量检查或结合加密验证。

验证HTTP_HOST

通过检查$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']获取当前访问域名,与授权域名列表比对:

php实现域名授权

$allowedDomains = ['example.com', 'sub.example.com'];
$currentDomain = $_SERVER['HTTP_HOST'];

if (!in_array($currentDomain, $allowedDomains)) {
    header('HTTP/1.1 403 Forbidden');
    exit('Domain access denied');
}

使用加密签名

生成包含域名的加密令牌,客户端需携带该令牌验证合法性:

$secretKey = 'your_secret_key';
$authorizedDomain = 'example.com';
$token = md5($authorizedDomain . $secretKey);

// 客户端请求需携带token参数
if ($_GET['token'] !== $token) {
    die('Invalid domain authorization');
}

结合数据库验证

存储授权域名到数据库,动态验证请求来源:

php实现域名授权

$db = new PDO('mysql:host=localhost;dbname=auth_db', 'user', 'pass');
$stmt = $db->prepare("SELECT 1 FROM allowed_domains WHERE domain = ?");
$stmt->execute([$_SERVER['HTTP_HOST']]);

if (!$stmt->fetch()) {
    header('Location: https://error.com/unauthorized');
    exit;
}

通过.htaccess限制

Apache服务器可通过配置文件限制访问来源:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^ - [F]

动态脚本授权

对于API或远程调用场景,使用时间戳+域名生成动态签名:

$domain = $_SERVER['HTTP_HOST'];
$timestamp = time();
$validWindow = 300; // 5分钟有效期
$signature = hash_hmac('sha256', $domain.$timestamp, 'secret_key');

if (abs(time() - $_GET['timestamp']) > $validWindow 
    || $_GET['sign'] !== $signature) {
    die('Authorization failed');
}

注意事项

  • HTTP_HOST可能被伪造,需结合其他验证手段
  • 考虑使用HTTPS防止中间人攻击
  • 重要系统建议结合IP白名单验证
  • 定期更新加密密钥增强安全性

标签: 域名php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

Vue如何实现多级域名

Vue如何实现多级域名

Vue 实现多级域名的方法 Vue 本身是一个前端框架,多级域名的实现通常需要结合后端配置和前端路由。以下是几种常见的方法: 使用路由动态匹配 在 Vue Router 中可以通过动态路由参数匹配…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_sh…