如何防范盗链

防范盗链(Hotlinking)主要是为了防止他人直接链接到你网站的资源(如图片、视频、文件等),从而导致你的带宽被滥用、服务器压力增大,甚至影响用户体验。

以下是几种常见且有效的防盗链方法:


✅ 1. 使用 Referer 检查(最常用)

通过服务器配置判断请求来源是否合法。

Apache(.htaccess):
apache 复制代码
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|mp4|pdf)$ - [F,NC]
Nginx:
nginx 复制代码
location ~* \.(jpg|jpeg|png|gif|mp4|pdf)$ {
    valid_referers none blocked server_names ~\.google\. ~\.bing\.;
    if ($invalid_referer) {
        return 403;
    }
}

📌 说明:valid_referers 可以设置允许的来源(如你的域名),其他来源一律拒绝。


✅ 2. 添加水印(视觉防护)

对图片、视频等资源添加文字或图案水印,即使被盗链,也能暴露来源,起到威慑作用。

💡 建议:使用动态水印(根据用户IP或时间生成),更难去除。


✅ 3. 使用 Token 验证(高级防护)

为资源生成带时间戳和签名的临时链接(Token),只有携带合法 Token 的请求才能访问。

适用场景:私有文件下载、会员内容分享。

示例(伪代码):

python 复制代码
import hashlib
import time

def generate_token(filename, secret_key, expire=3600):
    timestamp = int(time.time())
    token = f"{filename}:{timestamp}:{secret_key}"
    sign = hashlib.md5(token.encode()).hexdigest()
    return f"{filename}?t={timestamp}&s={sign}"

✅ 4. CDN 防盗链功能

如果你使用了 CDN(如阿里云 CDN、腾讯云 CDN、Cloudflare 等),通常都内置了防盗链功能。

以阿里云 CDN 为例:
  • 进入控制台 → CDN → 域名管理 → 配置防盗链
  • 设置:
    • 启用 Referer 防盗链
    • 添加白名单(如你的域名)
    • 可选:设置默认返回页面(如返回一张"禁止盗链"图)

✅ 5. 限制访问频率(防爬虫+防滥用)

即使不完全防盗链,也可以通过限流防止资源被恶意调用。

例如使用 Nginx 的 limit_req 模块限制每秒请求数。


⚠️ 注意事项:

  • Referer 可被伪造:黑客可以修改 HTTP 头部伪装来源,所以仅依赖 Referer 不够安全。
  • 用户体验问题:过度严格的防盗链可能导致正常用户访问失败(如分享链接失效)。
  • 移动端和 App:App 内的资源请求通常没有 Referer,需配合 Token 或签名验证。

✅ 总结:

防护方式 适用场景 安全性
Referer 检查 普通网站、图片防盗链 ★★★☆☆
水印 图片/视频内容防泄露 ★★★★☆
Token 验证 私有文件、会员资源 ★★★★★
CDN 防盗链 使用 CDN 的网站 ★★★★☆

📌 最佳实践组合

使用 CDN + Referer 防盗链 + Token 临时链接,兼顾安全性与灵活性。

相关推荐
逸丶时光2 年前
微信小程序真机无法下载文件
微信小程序·防盗链·域名白名单·uni下载·downloadfile
树下一少年3 年前
nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介
linux·运维·nginx·web·防盗链
源点3 年前
微信小程序防盗链referer问题处理
微信小程序·小程序·cdn·防盗链·百度云·edgejs