PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php有效防止图片盗用、盗链的两种方法

管理员 2025-03-07
工作总结
59

在 PHP 中,防止图片盗用和盗链是保护网站资源的重要手段。以下是两种常见的有效方法:


方法 1:使用 Referer 检查 防止盗链

通过检查请求的 Referer 头,判断请求是否来自合法域名。如果不是,则拒绝访问或返回错误提示。

实现步骤:

  1. 在图片访问的 PHP 脚本中,获取 Referer 头。

  2. 检查 Referer 是否来自允许的域名。

  3. 如果 Referer 不合法,返回错误提示或替代图片。

示例代码:

php
复制
<?php// 允许的域名列表$allowed_domains = ['www.yourdomain.com', 'yourdomain.com'];// 获取 Referer$referer = $_SERVER['HTTP_REFERER'] ?? '';// 检查 Referer 是否合法$is_allowed = false;foreach ($allowed_domains as $domain) {
    if (strpos($referer, $domain) !== false) {
        $is_allowed = true;
        break;
    }}// 如果 Referer 不合法,返回错误提示或替代图片if (!$is_allowed) {
    header('HTTP/1.1 403 Forbidden');
    echo '禁止访问:图片仅限本站使用!';
    exit;}// 如果合法,输出图片$image_path = 'path/to/your/image.jpg';header('Content-Type: image/jpeg');readfile($image_path);?>

优点:

  • 简单易实现。

  • 可以有效防止直接盗链。

缺点:

  • Referer 头可以被伪造。

  • 如果用户浏览器禁用了 Referer,合法用户可能无法访问图片。


方法 2:使用 动态 URL + Token 验证 防止盗用

通过生成动态的图片 URL,并在 URL 中包含一个加密的 Token,验证 Token 的合法性来防止盗用。

实现步骤:

  1. 生成一个加密的 Token,包含时间戳和图片路径等信息。

  2. 将 Token 附加到图片 URL 中。

  3. 在访问图片时,验证 Token 是否合法。

示例代码:

生成图片 URL:
php
复制
<?phpfunction generate_image_url($image_path) {
    $secret_key = 'your_secret_key'; // 加密密钥
    $timestamp = time(); // 当前时间戳
    $token = md5($secret_key . $image_path . $timestamp); // 生成 Token

    // 返回带 Token 的图片 URL
    return "https://www.yourdomain.com/get_image.php?path=" . urlencode($image_path) . "&token=$token&t=$timestamp";}// 示例:生成图片 URL$image_url = generate_image_url('path/to/your/image.jpg');echo "<img src='$image_url' alt='Protected Image'>";?>
验证 Token 并输出图片:
php
复制
<?php$secret_key = 'your_secret_key'; // 加密密钥// 获取 URL 参数$image_path = urldecode($_GET['path'] ?? '');$token = $_GET['token'] ?? '';$timestamp = $_GET['t'] ?? 0;// 验证 Token 是否合法$expected_token = md5($secret_key . $image_path . $timestamp);if ($token !== $expected_token || (time() - $timestamp) > 3600) { // Token 有效期 1 小时
    header('HTTP/1.1 403 Forbidden');
    echo '禁止访问:图片链接已过期或无效!';
    exit;}// 如果合法,输出图片header('Content-Type: image/jpeg');readfile($image_path);?>

优点:

  • 安全性高,Token 难以伪造。

  • 可以设置 Token 的有效期,防止链接被长期盗用。

缺点:

  • 实现稍复杂。

  • 需要动态生成图片 URL,可能增加服务器负担。


方法 3:结合 .htaccess 文件 防止盗链(适用于 Apache 服务器)

通过 Apache 的 .htaccess 文件,直接限制图片的访问来源。

实现步骤:

  1. 在图片目录下创建 .htaccess 文件。

  2. 配置 .htaccess,限制访问来源。

示例 .htaccess 文件:

apache
复制
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?anotherapproveddomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC]

解释:

  • RewriteCond:检查 Referer 是否来自允许的域名。

  • RewriteRule:如果 Referer 不合法,返回 403 禁止访问。

优点:

  • 直接在服务器层面实现,无需修改 PHP 代码。

  • 性能较好。

缺点:

  • 仅适用于 Apache 服务器。

  • Referer 头可以被伪造。


方法 4:使用 水印 防止图片盗用

在图片上添加水印,即使图片被盗用,也能追踪来源或起到警示作用。

实现步骤:

  1. 使用 PHP 的 GD 库或 ImageMagick 库为图片添加水印。

  2. 在输出图片时动态添加水印。

示例代码:

php
复制
<?php// 加载原始图片$image = imagecreatefromjpeg('path/to/your/image.jpg');// 加载水印图片$watermark = imagecreatefrompng('path/to/watermark.png');// 获取水印图片的宽度和高度$watermark_width = imagesx($watermark);$watermark_height = imagesy($watermark);// 将水印添加到原始图片上$dest_x = imagesx($image) - $watermark_width - 10; // 水印位置:右下角$dest_y = imagesy($image) - $watermark_height - 10;imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);// 输出带水印的图片header('Content-Type: image/jpeg');imagejpeg($image);// 释放内存imagedestroy($image);imagedestroy($watermark);?>

优点:

  • 即使图片被盗用,也能通过水印追踪来源。

  • 对用户体验影响较小。

缺点:

  • 水印可能被裁剪或覆盖。

  • 增加服务器处理负担。


总结

方法优点缺点适用场景
Referer 检查简单易实现Referer 可伪造,浏览器可能禁用 Referer简单的防盗链需求
动态 URL + Token 验证安全性高,可设置有效期实现复杂,增加服务器负担高安全性需求的防盗链
.htaccess 文件服务器层面实现,性能好仅适用于 Apache,Referer 可伪造Apache 服务器的防盗链需求
水印可追踪来源,对用户体验影响小水印可能被裁剪,增加服务器负担防止图片盗用

根据实际需求,可以选择一种或多种方法结合使用,以达到最佳的防盗效果。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部