代码如下,具有防跨站和网址加密功能。你问我用这个有什么意义,主要是可以套国内的CDN呀!
非专业程序员,js和正则都是现学的,没啥基础,如果有改进方式,非常欢迎。
// 允许的 CORS 来源
const ALLOWED_REFERER = [
/^https?:\/\/localhost(:\d*)?\/.*$/,
/^https?:\/\/([\w-]+\.)*w3schools\.com(:\d*)?\/.*$/
];
// 是否允许所有无 Referer 请求
const ALLOW_NO_ORIGIN = true;
//输入你的密码,密码加在path后面做SHA-1运算
const MYSECRET = "123456";
function validateReferer(req) {
const referer = req.headers.get('Referer');
if (referer) {
for (const el of ALLOWED_REFERER) {
if (el.exec(referer)) {
return true;
}
}
return false;
}
return ALLOW_NO_ORIGIN; // 是否拒绝所有无 Referer 请求
}
async function handle(request) {
let url = new URL(request.url);
const acceptType = request.headers.get('Accept');
const hash_request = url.pathname.split("/")[1];
const path_real = url.pathname.substring(hash_request.length + 1, url.pathname.length);
url.hostname = "cdn.jsdelivr.net";
url.pathname = path_real;
if (!(await validatePath(hash_request, path_real))) {
return new Response('Error Hash', {
status: 403
});
}
if (!(validateReferer(request))) {
return new Response('Blocked Host', {
status: 403
});
}
return await fetch(url);
}
async function validatePath(hash_request, path_real) {
const message = new TextEncoder().encode(path_real + MYSECRET);
const myDigest = await crypto.subtle.digest('SHA-1', message);
const hashArray = Array.from(new Uint8Array(myDigest));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
return (hashHex == hash_request);
}
addEventListener('fetch',
event => {
event.respondWith(handle(event.request));
})
创建cloudflare workers并复制粘贴以上代码
网上一堆教程,随便看一个吧。
CloudFlare的Worker免费部署服务Jum的博客-程序员宅基地cloudflare worker - 程序员宅基地
修改参数,主要时refer改成你的网站,这里的正则你大概能看懂怎么改,注意把 . 换成 . 就行了。然后修改密码,主要是方式被滥用。
修改你的网址,使其带上SHA-1加密。比如你的workers绑定的域名是 w3schools.com ,你想反代的网址是 https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js ,你的密码是 123456 。找一个可以SHA-1加密的工具(比如网站 SHA1在线加密、校验工具-ME2在线工具 ),然后复制 url+你的密码 (对应于上面的例子就是 /npm/jquery@3.2.1/dist/jquery.min.js123456 ),得到密文 (对应于上面的例子就是 371388c8eafe02c8876f67abe1d170b920218881 )。这时重新组合你的新的请求的host+url为: https://你的workers域名/密文/原url (对应于上面的例子就是 https://w3schools.com/371388c8eafe02c8876f67abe1d170b920218881/npm/jquery@3.2.1/dist/jquery.min.js )。
在你的网站中替换这个网址就OK啦!