防范盗链(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 临时链接,兼顾安全性与灵活性。