在之前的文章中提到,可以利用Cloudflare免费WAF实现零成本网站图片防盗链1,本文将介绍如何在 EdgeOne 中实现同样的功能。
目录
设置边缘函数
1. 选择“访问控制”模板
点击左侧高级能力 -- 边缘函数 -- 函数管理,在给定的模板中选择访问控制。

2. 函数命名
为函数设置一个任意的名称(例如:image-hotlink-protection)。
3. 修改代码
将函数代码修改如下:
async function handleRequest(request) {
const allowedDomains = env.ALLOWED_DOMAINS;
if (!allowedDomains || !Array.isArray(allowedDomains) || allowedDomains.length === 0) {
return new Response('Server Configuration Error: ALLOWED_DOMAINS environment variable is not set correctly.', { status: 500 });
}
const referer = request.headers.get('Referer');
// 放行空 Referer,否则图床自身也无法访问图片
if (!referer) {
return fetch(request);
}
let refererHost;
try {
refererHost = new URL(referer).hostname;
} catch (err) {
return new Response('Invalid Referer.', { status: 403 });
}
// --- 核心逻辑修改在这里 ---
let isAllowed = false;
for (const domain of allowedDomains) {
// 检查 refererHost 是否等于白名单域名,或者以 ".白名单域名" 结尾(支持子域名)
if (refererHost === domain || refererHost.endsWith('.' + domain)) {
isAllowed = true;
break; // 找到匹配项,无需继续循环
}
}
// --- 修改结束 ---
if (isAllowed) {
return fetch(request);
} else {
return new Response('Hotlink protection: Access denied.', { status: 403 });
}
}
// addEventListener 部分保持不变
addEventListener('fetch', event => {
event.passThroughOnException();
event.respondWith(handleRequest(event.request));
});
主要修改点:
- 从“硬编码”到“环境变量”:通过环境变量
ALLOWED_DOMAINS,实现灵活的白名单维护。 - 多域名/子域名支持:修改了判断逻辑,以支持多个域名及其所有子域名。
- 放行“空 Referer”:允许没有
Referer头的请求,确保在浏览器中直接打开图片链接时能够正常显示。 - 配置错误检查:增加了对环境变量是否正确设置的判断,如果未设置则返回500错误。
新增触发规则
为函数创建一个新的触发规则。

设置匹配类型为HOST,运算符为等于,并在值中输入图床域名。

设置环境变量2
在函数管理页面,找到环境变量配置。


变量名设置为 ALLOWED_DOMAINS,变量类型选择 JSON,然后在下方的值中输入需要加入白名单的域名数组。

重要提示:每次修改完变量后,别忘了单独点击部署以使更改生效。
至此,在EdgeOne上设置图片防盗链的操作已经全部完成,可以测试测试效果了。
NOTES
利用Cloudflare免费WAF实现零成本网站图片防盗链(https://bb.bins.fyi/archives/31/) ↩
EdgeOne环境变量文档(https://edgeone.ai/zh/document/62764) ↩