全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1726|回复: 13

workers 反代 jsdelivr,支持加密和防盗链。

[复制链接]
发表于 2022-5-22 11:42:06 | 显示全部楼层 |阅读模式
本帖最后由 jarmoku 于 2022-6-8 19:39 编辑

代码如下,具有防跨站和网址加密功能。你问我用这个有什么意义,主要是可以套国内的CDN呀!
具体使用使用方式参阅我的个人博客:https://www.430074.xyz/posts/workers-jsdeliver.html
  1. // 允许的 CORS 来源
  2. const ALLOWED_REFERER = [
  3.   /^https?:\/\/localhost(:\d*)?\/.*$/,
  4.   /^https?:\/\/([\w-]+\.)*w3schools\.com(:\d*)?\/.*$/
  5. ];
  6. // 是否允许所有无 Referer 请求
  7. const ALLOW_NO_ORIGIN = true;
  8. //输入你的密码,密码加在path后面做SHA-1运算
  9. const MYSECRET = "123456";


  10. function validateReferer(req) {
  11.   const referer = req.headers.get('Referer');
  12.   if (referer) {
  13.     for (const el of ALLOWED_REFERER) {
  14.       if (el.exec(referer)) {
  15.         return true;
  16.       }
  17.     }
  18.     return false;
  19.   }
  20.   return ALLOW_NO_ORIGIN; // 是否拒绝所有无 Referer 请求
  21. }


  22. async function handle(request) {
  23.   let url = new URL(request.url);
  24.   const acceptType = request.headers.get('Accept');
  25.   const hash_request = url.pathname.split("/")[1];
  26.   const path_real = url.pathname.substring(hash_request.length + 1, url.pathname.length);
  27.   url.hostname = "cdn.jsdelivr.net";
  28.   url.pathname = path_real;

  29.   if (!(await validatePath(hash_request, path_real))) {
  30.     return new Response('Error Hash', {
  31.       status: 403
  32.     });
  33.   }

  34.   if (!(validateReferer(request))) {
  35.     return new Response('Blocked Host', {
  36.       status: 403
  37.     });
  38.   }

  39.   return await fetch(url);
  40. }

  41. async function validatePath(hash_request, path_real) {
  42.   const message = new TextEncoder().encode(path_real + MYSECRET);
  43.   const myDigest = await crypto.subtle.digest('SHA-1', message);
  44.   const hashArray = Array.from(new Uint8Array(myDigest));
  45.   const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
  46.   return (hashHex == hash_request);
  47. }


  48. addEventListener('fetch', event => {
  49.   event.respondWith(handle(event.request));
  50. })
复制代码
发表于 2022-5-22 11:46:34 | 显示全部楼层
gcore.jsdelivr.net
cf.jsdelivr.net
fastly.jsdelivr.net
好了楼主退下吧
发表于 2022-5-22 11:51:46 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2022-6-8 19:58:57 | 显示全部楼层
gogoo2 发表于 2022-5-22 11:51
有没有国内cdn的呢?速度要快哦。

看我网站用的哪个
发表于 2022-6-8 20:08:56 | 显示全部楼层
worker那速度,整个小鸡不香吗
 楼主| 发表于 2022-6-8 20:12:32 | 显示全部楼层
haozi 发表于 2022-6-8 20:08
worker那速度,整个小鸡不香吗

你不会套国内cdn吗?
发表于 2022-6-8 20:12:58 | 显示全部楼层
jarmoku 发表于 2022-6-8 20:12
你不会套国内cdn吗?


小鸡不能套cdn吗?worker那线路,套了又能快到哪去?
 楼主| 发表于 2022-6-8 20:26:00 | 显示全部楼层
haozi 发表于 2022-6-8 20:12
小鸡不能套cdn吗?worker那线路,套了又能快到哪去?


你说得对,可惜我天天重装小鸡,不如workers稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-5-13 13:08 , Processed in 0.062857 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表