自定义 Referer 防盗链
Referer 防盗链技术是网站为了保护自己的资源,阻止其他网站非法引用其内容而采用的一种策略。该示例通过检查
HTTP
请求头中的 Referer
字段来判断请求来源,您可以灵活自定义改 Referer
的匹配规则,如果 Referer
不存在或者与允许的域名列表不匹配,边缘函数将拒绝请求并返回 403 状态码。async function handleRequest(request) {// 获取 Refererconst referer = request.headers.get('Referer');// Referer 为空,禁止访问if (!referer) {return new Response(null, { status: 403 });}const urlInfo = new URL(request.url);const refererRegExp = new RegExp(`^https?:\/\/${urlInfo.hostname}\/t-[0-9a-z]{10}\/.*`)// Referer 不在白名单,禁止访问if (!refererRegExp.test(referer)) {return new Response(null, { status: 403 });}// 正常请求,访问 EdgeOne 节点缓存或回源return fetch(request);}addEventListener('fetch', event => {// 当函数代码抛出未处理的异常时,边缘函数会将此请求转发回源站event.passThroughOnException();event.respondWith(handleRequest(event.request));});
示例预览
在 PC 端与移动端的浏览器地址栏中输入匹配到边缘函数触发规则的 URL(如:
https://example.com/images/ef-1.jpeg
),即可预览到示例效果。HTTP 请求头 ![](https://cloudcache.intl.tencent-cloud.com/cms/backend-cms/dbc3338876ef11ee8fb05254000e2caf.png)
Referer
为 https://example.com/t-0123456789/page,边缘函数正常响应图片。![](https://cloudcache.intl.tencent-cloud.com/cms/backend-cms/dbc3338876ef11ee8fb05254000e2caf.png)
HTTP 请求头
Referer
不在白名单,边缘函数识别为盗链并响应 403 状态码。![](https://cloudcache.intl.tencent-cloud.com/cms/backend-cms/dba692a076ef11ee8fb05254000e2caf.png)
![](https://cloudcache.intl.tencent-cloud.com/cms/backend-cms/dba692a076ef11ee8fb05254000e2caf.png)
相关参考