|
|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在网站运维中,图片、视频、下载文件等静态资源被外站直接引用(盗链)是一个非常常见的问题。
盗链不仅会消耗服务器或 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 / 签名防护(强烈推荐)
适合:
原理:
- 资源 URL 中携带时间戳 + 签名
- 超时或签名错误,直接拒绝访问
示例 URL:
https://cdn.example.com/video.mp4?ts=1710000000&sign=xxxx
优点:
2. 防盗链 + 缓存策略结合
思路:
- 热资源允许缓存
- 异常来源不缓存或低 TTL
- 恶意刷流量无法形成缓存命中
适合防:
3. 限制单 IP 请求频率(Rate Limit)
适合防:
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 拦截
对付以下情况非常有效:
5. 修改资源访问路径(隐藏真实地址)
思路:
- 静态资源通过程序中转
- 不暴露真实 CDN 路径
- 非页面请求直接拒绝
适合:
五、推荐的组合防护方案
普通网站(图片为主)
- CDN Referer 防盗链
- Nginx 限制频率
- 合理缓存策略
视频 / 下载站点
经常被刷流量的网站
- CDN 防盗链
- WAF CC 防护
- 源站限速
- IP 封禁策略
六、总结
防盗链不是“配了就万事大吉”,而是一个分层防护体系:
- 防盗链:防普通盗用
- Token:防长期引用
- 频率限制:防刷请求
- WAF:防自动化攻击
真正有效的方案,一定是多种手段组合使用。
|
|