当前位置:首页 > PHP

php 实现防盗链

2026-01-29 05:50:54PHP

防盗链的基本原理

防盗链(Hotlink Protection)是一种防止其他网站直接链接到你的资源(如图片、视频、文件等)的技术。通过检查HTTP请求头中的Referer字段,可以判断请求是否来自合法域名。

使用.htaccess文件实现

Apache服务器可以通过.htaccess文件实现防盗链。以下是一个典型的配置示例:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpg|jpeg|png|gif|mp4)$ - [NC,F,L]
  • NC表示不区分大小写。
  • F返回403禁止访问状态码。
  • L表示这是最后一条规则。

PHP代码实现防盗链

在PHP中,可以通过检查$_SERVER['HTTP_REFERER']来实现防盗链:

$allowed_domains = ['yourdomain.com', 'www.yourdomain.com'];
$referer = $_SERVER['HTTP_REFERER'] ?? '';
$is_allowed = false;

foreach ($allowed_domains as $domain) {
    if (strpos($referer, $domain) !== false) {
        $is_allowed = true;
        break;
    }
}

if (!$is_allowed && !empty($referer)) {
    header('HTTP/1.1 403 Forbidden');
    exit('Access denied - Hotlinking not allowed');
}

使用Nginx配置实现

对于Nginx服务器,可以在配置文件中添加以下内容:

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

动态生成资源

另一种更安全的方法是动态生成资源链接,而不是直接提供静态文件URL:

// 生成带令牌的图片URL
function generate_secure_url($file_path) {
    $secret = 'your_secret_key';
    $token = md5($secret . $file_path . time());
    return "download.php?file=" . urlencode($file_path) . "&token=$token";
}

// 验证并输出文件
$file = $_GET['file'] ?? '';
$token = $_GET['token'] ?? '';

if (verify_token($file, $token)) {
    header('Content-Type: ' . mime_content_type($file));
    readfile($file);
} else {
    header('HTTP/1.1 403 Forbidden');
    exit('Invalid access token');
}

使用CDN的防盗链功能

许多CDN服务(如Cloudflare、阿里云CDN等)都提供内置的防盗链功能。通常可以通过控制面板设置允许的Referer白名单,或者配置时间限制的访问令牌。

php 实现防盗链

注意事项

  • Referer头可以被伪造,不能完全依赖这种方式进行安全保护。
  • 某些浏览器或隐私设置可能不发送Referer头,需要特别处理这种情况。
  • 对于重要资源,建议结合多种保护措施,如动态URL生成、访问控制等。

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

相关文章

php实现socket

php实现socket

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

php实现栈

php实现栈

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

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (flock…