首页
学习
活动
专区
圈层
工具
发布

php 防盗链

PHP 防盗链基础概念

PHP 防盗链是指通过服务器端脚本(如 PHP)来防止其他网站直接链接到你的网站资源(如图片、视频、文档等),从而保护你的网站资源不被滥用。

优势

  1. 保护资源:防止资源被其他网站盗用,确保资源的合法使用。
  2. 减少带宽消耗:防止其他网站通过盗链消耗你的带宽。
  3. 提升网站安全性:减少恶意攻击的可能性。

类型

  1. 基于时间戳的防盗链:通过检查请求的时间戳来判断请求是否合法。
  2. 基于签名的防盗链:通过生成一个签名,客户端在请求时带上这个签名,服务器端验证签名的合法性。
  3. 基于 IP 地址的防盗链:通过检查请求的 IP 地址来判断请求是否合法。

应用场景

  1. 图片防盗链:防止其他网站直接链接你的图片。
  2. 视频防盗链:防止其他网站直接播放你的视频。
  3. 文档防盗链:防止其他网站直接下载你的文档。

示例代码

以下是一个基于签名的 PHP 防盗链示例:

代码语言:txt
复制
<?php
// 设置允许访问的域名列表
$allowed_domains = ['example.com', 'www.example.com'];

// 获取请求的域名
$request_domain = $_SERVER['HTTP_HOST'];

// 检查请求的域名是否在允许列表中
if (!in_array($request_domain, $allowed_domains)) {
    header('HTTP/1.0 403 Forbidden');
    echo 'Forbidden';
    exit;
}

// 生成签名
$secret_key = 'your_secret_key';
$file_path = '/path/to/your/resource.jpg';
$timestamp = time();
$signature = md5($secret_key . $file_path . $timestamp);

// 获取请求中的签名和时间戳
$request_signature = $_GET['signature'] ?? '';
$request_timestamp = $_GET['timestamp'] ?? '';

// 验证签名和时间戳
if ($request_signature === $signature && abs($request_timestamp - $timestamp) < 60) {
    // 签名和时间戳验证通过,输出资源
    header('Content-Type: image/jpeg');
    readfile($file_path);
} else {
    header('HTTP/1.0 403 Forbidden');
    echo 'Forbidden';
}
?>

参考链接

常见问题及解决方法

  1. 签名验证失败
    • 确保 secret_keyfile_path 没有泄露。
    • 确保客户端请求中带的签名和时间戳是正确的。
  • 时间戳验证失败
    • 确保客户端和服务器端的时间是同步的。
    • 调整时间戳的有效期(例如,允许 60 秒的误差)。
  • IP 地址验证失败
    • 确保服务器能够正确识别客户端的 IP 地址。
    • 考虑使用代理服务器的情况,可能需要配置 X-Forwarded-For 头。

通过以上方法,你可以有效地实现 PHP 防盗链,保护你的网站资源不被滥用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共26个视频
PHP教程 PHP项目实战(上) 学习猿地
学习猿地
共26个视频
PHP教程 PHP项目实战(下) 学习猿地
学习猿地
共28个视频
最新PHP基础常用扩展功能(上) 学习猿地
学习猿地
共24个视频
最新PHP基础常用扩展功能(下) 学习猿地
学习猿地
共30个视频
PHP7.4最新版基础教程(上) 学习猿地
学习猿地
共25个视频
PHP7.4最新版基础教程(下) 学习猿地
学习猿地
共40个视频
轻松学会Laravel-基础篇 学习猿地(已完结)
学习猿地
共4个视频
共50个视频
轻松学会Laravel-项目篇(商城API) 学习猿地
学习猿地
共8个视频
新版【NPM】包管理工具 学习猿地
学习猿地
领券