在Cloudflare配置防盗链规则:workers篇

介绍

在之前的文章中,讲解了如何在Cloudflare的防火墙中配置防盗链规则,帮助你防止不合法的外部站点盗用你网站的资源。在这篇文章中,将介绍如何通过 Cloudflare Workers 来实现更为灵活的防盗链策略。

一、什么是Cloudflare Workers?

Cloudflare Workers 是一个强大的工具,它允许你在Cloudflare的边缘网络上运行JavaScript代码,从而对请求和响应进行细粒度的控制。与防火墙规则不同,Workers能够让你在请求到达服务器之前,直接在Cloudflare的边缘节点上拦截并处理请求。

二、配置Cloudflare Workers防盗链规则

现在,让我们一步步配置一个基本的防盗链规则,确保只有你的站点和合法的搜索引擎能够访问你的资源。

步骤1:创建一个新的Worker脚本

  1. 登录到你的Cloudflare账户,进入 Workers 页面。
  2. 点击 创建Worker,进入脚本编辑页面。
  3. 在编辑器中,你将编写JavaScript代码来检查请求的 Referer 头,并确保只有合法的请求能访问你的资源。

步骤2:编写防盗链规则代码

在Cloudflare Workers中,我们可以使用 JavaScript 来检查 Referer 头,判断请求是否来自合法的来源。以下是一个简单的防盗链脚本示例:

在Cloudflare配置防盗链规则:workers篇
隐藏内容,输入密码后查看
F12

主要代码解释:

  1. addEventListener('fetch', event => {...})
    • 该事件监听器捕捉所有传入的 HTTP 请求(fetch 请求),并将其交给 handleRequest() 函数处理。
    • event.respondWith(handleRequest(event.request)):这一行代码会接收请求并传递给 handleRequest 函数进行处理。
  2. async function handleRequest(request)
    • handleRequest 是一个异步函数,它接受 HTTP 请求对象 request 作为参数,处理并返回一个响应。
    • 通过 new URL(request.url),你可以获取请求的 URL 地址。
    • const referer = request.headers.get('Referer') || '';:获取请求头中的 Referer 字段,这通常用于标识请求来源的页面。|| '' 是为了防止 Referer 不存在时赋值为空字符串。
    • const userAgent = request.headers.get('User-Agent') || '';:获取请求头中的 User-Agent 字段,标识发送请求的浏览器或爬虫。
  3. 定义有效的 Referer 来源
    • const validReferers = ['joyb.cc', 'www.joyb.cc'];:在这里,定义了有效的 Referer 来源。只有来源于 joyb.ccwww.joyb.cc 的请求被认为是合法的。
    • const isValidReferer = validReferers.some(valid => referer.includes(valid));:检查 Referer 是否属于有效来源之一。
  4. 检查请求是否来自搜索引擎爬虫
    • const isSearchEngineBot = isBot(userAgent);:调用 isBot 函数,检查请求的 User-Agent 是否是搜索引擎爬虫的标识。
  5. 判断是否为图片请求且 Referer 无效
    • if (isImageRequest(url) && !isValidReferer && !isSearchEngineBot):如果请求是图片请求(通过 isImageRequest 函数检查),并且 Referer 无效且不是搜索引擎爬虫,则认为这是非法请求。
    • return new Response(generateErrorPage(), {...});:对非法请求返回一个 403 错误页面,使用 generateErrorPage 函数生成一个自定义的错误页面。
  6. 强制浏览器直接显示图片
    • if (isImageRequest(url)):如果是图片请求,继续执行以下代码:
    • return fetch(request, {...});:返回图片的请求响应,并且通过设置响应头来控制浏览器如何处理该资源。
      • 'Content-Disposition': 'inline':强制浏览器直接显示图片,而不是下载。
      • 'Cache-Control': 'no-store':防止浏览器缓存图片,确保每次请求都会重新获取资源。
  7. 继续处理有效请求
    • return fetch(request);:对于所有其他请求(不涉及图片或已通过验证的请求),直接返回正常的请求响应。

辅助函数解析

  1. isImageRequest(url)
    • 该函数检查请求 URL 是否为图片请求。具体来说,它判断请求的路径中是否包含 /wp-content/uploads/(默认的上传路径),并且文件后缀是否为图片格式(.jpg, .jpeg, .png, .gif, .webp)。
  2. isBot(userAgent)
    • 该函数通过正则表达式检查 User-Agent 是否包含常见的搜索引擎爬虫的标识符(如 Googlebot, Bingbot, Baiduspider 等)。如果是,返回 true,否则返回 false
  3. generateErrorPage()
    • 该函数返回一个 HTML 错误页面的字符串。该页面会显示一个定制的错误信息,并通过音频、按钮等方式提醒用户请求被拒绝。
    • 页面样式:通过 CSS 设置了页面的背景、文字、按钮等元素的样式,使用了动画效果让错误页面更具视觉吸引力。
    • 音频:页面内包含了一个自动播放的音频文件,作为额外的提示(你可以根据需要修改音频文件链接)。

步骤3:部署并测试Worker

  1. 在脚本编辑器中,点击 保存并部署 按钮,将你的 Worker 脚本部署到Cloudflare的边缘网络。
  2. 在部署完成后,你需要配置路由,确保你的Worker脚本处理正确的请求路径。你可以选择为 /wp-content/uploads/ 目录下的文件创建路由:joyb.cc/wp-content/uploads/*
图片[2]-在Cloudflare配置防盗链规则:workers篇
  1. 保存路由设置后,测试你的防盗链规则。你可以通过访问你网站的资源,或者尝试从其他网站进行盗链测试,查看是否能够成功拦截非法请求。

三、Cloudflare Workers 防盗链规则的优势

与传统的防火墙规则相比,只用Cloudflare Workers 配置防盗链规则,你可以更精确地控制哪些请求可以访问你的网站资源,哪些请求应该被拦截。并且可以自定义返回错误提示页面(页面中包含返回你网站的链接按钮,这样引用你网站的爬虫蜘蛛就会跑到你网站,也可以直接重定向)。还能返回一张不可描述的图片(但这个图片地址千万别用自己的)。如果之前有人引用你网站上的图片时,那就有得看了。哈哈。所以千万别用他人站点的链接资源防止互相伤害。最好是下载到本地。

  1. 更灵活的控制:Cloudflare Workers 允许你完全自定义请求的处理方式,可以精确控制哪些请求可以访问资源,哪些请求应被拦截。
  2. 边缘计算:由于Workers在Cloudflare的边缘节点上运行,所有的请求检查都是在接近用户的地方进行的,从而极大地提高了性能和响应速度。
  3. 无需访问源服务器:Workers处理请求时,不需要经过原始服务器,可以有效减轻服务器的负担。

四、注意事项

尽管Cloudflare Workers提供了更强大的防盗链控制能力,但也有一些需要注意的地方:

  1. 客户端绕过:像所有的防盗链措施一样,Cloudflare Workers 只能在请求到达你的服务器之前进行拦截,客户端仍然可以通过修改 Referer 来绕过规则。因此,防盗链主要起到防止其他站点非法引用资源的作用,无法完全防止用户下载资源。
  2. 维护和更新:,你可能需要定期更新允许的 Referer 列表,以便与新的搜索引擎保持兼容。
© 版权声明
THE END
喜欢就支持一下吧
赞赏