如何配置防盗链?还有哪些防资源盗用的方式?
在网站运维中,图片、视频、下载文件等静态资源被外站直接引用(盗链)是一个非常常见的问题。盗链不仅会消耗服务器或 CDN 流量,还可能导致带宽被刷满、费用上涨,甚至影响正常用户访问。
本文将从三个方面展开:
[*]什么是盗链与防盗链
[*]常见的防盗链配置方式(含 Nginx 示例)
[*]除了防盗链,还有哪些更有效的手段?
一、什么是盗链?为什么要防?
1. 什么是盗链
盗链指的是:
其他网站直接引用你站点的资源 URL(图片、视频、JS、下载文件等),但访问请求并不经过你的网站页面。
例如:
你的网站:
https://example.com/images/a.jpg
外站在自己页面中直接引用:
<img src="https://example.com/images/a.jpg">
用户在访问外站时,你的服务器或 CDN 仍然要为这些请求提供流量。
2. 为什么要防盗链
不防盗链可能带来的问题:
[*]流量被大量消耗(尤其是图片、视频)
[*]CDN 流量费用增加
[*]带宽被占满,影响正常访问
[*]被恶意刷小文件,持续耗资源
二、最常见的防盗链方式:Referer 防盗链
1. Referer 防盗链原理
浏览器在请求资源时,通常会携带 Referer 请求头,用来表示当前请求来源页面的地址。
防盗链的本质就是:
[*]判断 Referer 是否来自允许的域名
[*]不在白名单中的请求,直接拒绝或返回默认图片
2. Nginx 防盗链配置示例(图片)
location ~* \.(jpg|jpeg|png|gif|webp)$ {
valid_referers none blocked
example.com
www.example.com
*.example.com;
if ($invalid_referer) {
return 403;
# 或者返回默认图片
# rewrite ^/.*$ /images/forbidden.jpg break;
}
}
说明:
[*]valid_referers:定义允许的来源
[*]none:允许无 Referer(如直接访问)
[*]blocked:允许被代理隐藏 Referer 的请求
[*]$invalid_referer:Referer 不在白名单时为 true
3. CDN 防盗链(更推荐)
如果你的网站已经接入 CDN,优先在 CDN 层做防盗链:
优点:
[*]不消耗源站资源
[*]防护效果更好
[*]可视化配置,简单安全
常见支持方式:
[*]Referer 白名单 / 黑名单
[*]通配符域名匹配(如 *.example.com)
[*]一行一个规则,支持 * 匹配
示例规则:
[*]example.com
[*]*.example.com
[*]*google*
三、防盗链的局限性
虽然 Referer 防盗链很常用,但它并不是万能的:
[*]Referer 可以被伪造
[*]部分工具或脚本请求没有 Referer
[*]无法防止“直接下载 URL”的行为
[*]对视频、防下载文件效果有限
因此,在实际生产环境中,通常会搭配其他方式一起使用。
四、除了防盗链,还有哪些方式?
1. Token / 签名防护(强烈推荐)
适合:
[*]图片
[*]视频
[*]下载文件
[*]API 接口
原理:
[*]资源 URL 中携带时间戳 + 签名
[*]超时或签名错误,直接拒绝访问
示例 URL:
https://cdn.example.com/video.mp4?ts=1710000000&sign=xxxx
优点:
[*]无法被长期盗用
[*]安全性高
[*]CDN 原生支持
2. 防盗链 + 缓存策略结合
思路:
[*]热资源允许缓存
[*]异常来源不缓存或低 TTL
[*]恶意刷流量无法形成缓存命中
适合防:
[*]小文件高频刷请求
[*]低成本刷 CDN 流量
3. 限制单 IP 请求频率(Rate Limit)
适合防:
[*]图片被脚本刷
[*]API 或下载接口被滥用
Nginx 示例:
limit_req_zone $binary_remote_addr zone=img:10m rate=10r/s;
location ~* \.(jpg|png|gif)$ {
limit_req zone=img burst=20 nodelay;
}
4. 启用 WAF(非常重要)
WAF 可以做:
[*]频率限制
[*]人机识别
[*]CC 攻击防护
[*]异常 UA / Referer 拦截
对付以下情况非常有效:
[*]模拟浏览器盗链
[*]Referer 伪造
[*]自动化刷请求
5. 修改资源访问路径(隐藏真实地址)
思路:
[*]静态资源通过程序中转
[*]不暴露真实 CDN 路径
[*]非页面请求直接拒绝
适合:
[*]高价值图片
[*]私有下载资源
五、推荐的组合防护方案
普通网站(图片为主)
[*]CDN Referer 防盗链
[*]Nginx 限制频率
[*]合理缓存策略
视频 / 下载站点
[*]Token 签名
[*]访问有效期
[*]CDN + WAF
经常被刷流量的网站
[*]CDN 防盗链
[*]WAF CC 防护
[*]源站限速
[*]IP 封禁策略
六、总结
防盗链不是“配了就万事大吉”,而是一个分层防护体系:
[*]防盗链:防普通盗用
[*]Token:防长期引用
[*]频率限制:防刷请求
[*]WAF:防自动化攻击
真正有效的方案,一定是多种手段组合使用。
页:
[1]