当前位置:首页 > 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实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…