当前位置:首页 > PHP

php实现盗链

2026-02-14 23:24:03PHP

在 PHP 中实现防盗链(Hotlink Protection)可以通过检查 HTTP Referer 头或生成动态访问令牌来限制资源的非法外链。以下是几种常见的实现方法:

检查 HTTP Referer 头

通过验证请求的 $_SERVER['HTTP_REFERER'] 是否来自合法域名,阻止非授权站点的访问。

$allowedDomains = ['example.com', 'trusted-site.com'];
$referer = parse_url($_SERVER['HTTP_REFERER'] ?? '', PHP_URL_HOST);

if (!in_array($referer, $allowedDomains)) {
    header('HTTP/1.1 403 Forbidden');
    exit('Access denied: Hotlinking not allowed.');
}

// 允许访问时输出资源
header('Content-Type: image/jpeg');
readfile('protected-image.jpg');

注意:Referer 头可能被伪造或缺失,需结合其他方法增强安全性。

动态令牌验证

为资源链接生成一次性或时效性令牌,仅允许携带有效令牌的请求访问。

$secretKey = 'your-secret-key';
$expireTime = time() + 3600; // 1小时有效期
$token = md5($secretKey . $expireTime . 'resource-path');

// 验证令牌
if (($_GET['token'] ?? '') !== $token || time() > $expireTime) {
    header('HTTP/1.1 403 Forbidden');
    exit('Invalid or expired token.');
}

// 输出资源
header('Content-Type: application/pdf');
readfile('protected-document.pdf');

Nginx 与 PHP 协作

通过 Nginx 配置直接拦截非法 Referer,减轻 PHP 处理压力。

location ~* \.(jpg|png|gif)$ {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

PHP 仅需处理动态资源验证。

输出替代内容

对盗链请求返回替代内容(如占位图或警告信息)。

if (!str_contains($_SERVER['HTTP_REFERER'] ?? '', 'example.com')) {
    header('Content-Type: image/png');
    readfile('anti-hotlink-image.png');
    exit;
}

关键点

php实现盗链

  • 静态资源建议通过 Web 服务器(如 Nginx/Apache)直接配置防盗链。
  • 动态资源需结合令牌和会话验证。
  • Referer 检查可作为辅助手段,但不可单独依赖。

标签: 盗链php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

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

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现socket

php实现socket

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

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…