目录
核心原理:Referer与防盗链
防盗链的核心在于检查HTTP请求中的Referer请求头。
-
什么是Referer? 当浏览器从一个页面(例如
A.com)请求另一个域名(例如B.com)上的资源(如图片)时,会向B.com的服务器发送一个请求。这个请求中通常会包含一个名为Referer的请求头,其值就是来源页面的URL,即A.com。它的作用是告知目标服务器请求的来源页面。 -
如何利用Referer防盗链? 通过设置一条规则,可以只允许来自指定网站(白名单域名)的
Referer请求访问图片。对于Referer来自其他未知网站的请求,则直接拦截。 -
“允许空Referer”的重要性: 当用户直接在浏览器地址栏输入图片URL访问,或某些桌面应用、移动App发起请求时,这些请求通常不携带
Referer头(即Referer为空)。为了避免误伤这些正常访问,规则必须允许“空Referer”的请求通过。
前提条件
配置前,需确保满足以下前提条件:
- 拥有一个个人域名(以
your-domain.com为例)。 - 该域名已成功添加至Cloudflare免费账户,并由Cloudflare进行DNS解析。
- 计划保护的图床子域名(例如
images.your-domain.com)已创建。
详细设置步骤
第1步:确保DNS记录已开启Cloudflare代理
WAF规则只对经过Cloudflare网络(即“橙色云朵”)的流量生效。
- 登录Cloudflare仪表板,选择相应域名。
- 进入左侧菜单的 DNS -> 记录 (Records)。
- 找到图床子域名(例如
images)的A或CNAME记录。 - 确保其 代理状态 (Proxy status) 是“已代理”(显示为橙色云朵)。如果显示为灰色云朵,需手动点击将其切换为橙色。
第2步:定位WAF自定义规则菜单
- 在左侧主菜单中,点击 安全性 (Security)。
- 在展开的子菜单中,选择 WAF (Web Application Firewall)。
- 在WAF页面的顶部选项卡中,点击 自定义规则 (Custom rules)。
第3步:创建并部署防盗链规则
此为核心操作步骤。
-
在“自定义规则”页面,点击蓝色的 创建规则 (Create rule) 按钮。
-
填写规则名称 (Rule name): 输入一个描述性的名称,例如
网站图片防盗链保护 (Image Hotlink Protection)。 -
配置匹配条件: 点击“编辑表达式 (Edit expression)”,然后将下面这段经过验证的、可直接复制的表达式粘贴进去:
(http.request.uri.path contains ".jpg" or http.request.uri.path contains ".png" or http.request.uri.path contains ".gif" or http.request.uri.path contains ".webp") and not http.referer contains "your-domain.com" and http.referer ne ""注意: 务必将表达式中的
your-domain.com替换为自己的主域名。 -
规则表达式解析:
| 表达式部分 | 作用 |
|---|---|
(http.request.uri.path contains ".jpg" or ...) |
锁定目标: 规则仅对请求图片文件(可按需增删格式如.jpeg, .svg)的URL生效。 |
not http.referer contains "your-domain.com" |
设置白名单: 防盗链的关键。规定若请求来源(Referer)不包含指定的自有域名,则条件成立。 |
http.referer ne "" |
允许直接访问: ne意为“不等于”。此条件排除了“空Referer”的情况,确保直接访问图片URL可以成功。 |
-
选择执行操作 (Then... Take action): 对于匹配上述条件的请求,从下拉菜单中选择 阻止 (Block)。
-
部署规则: 点击页面底部的 部署 (Deploy) 按钮,规则将立即在全球范围内生效。
维护与测试
部署完成后,进行测试以验证效果。
-
如何添加新的白名单网站? 若需允许其他网站(例如,合作伙伴的网站
partner-site.com)引用图片,只需修改表达式。- 编辑已创建的防盗链规则。
- 在表达式编辑器中,找到
not http.referer contains "your-domain.com"这一部分。 - 将其修改为:
not (http.referer contains "your-domain.com" or http.referer contains "partner-site.com") - 保存并重新部署规则。
-
测试方法:
- 白名单测试: 在自己的网站上引用一张图床图片,确认其能正常显示。
- 盗链测试: 使用在线代码编辑器(如CodePen),在HTML中引用图片URL。若图片显示为“破图”,且在浏览器开发者工具的网络请求中看到
403 Forbidden错误,则表明防盗链成功。 - 直接访问测试: 将图片URL直接复制到浏览器新标签页中打开,确认图片能正常显示。