惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
DataBreaches.Net
B
Blog RSS Feed
博客园_首页
The GitHub Blog
The GitHub Blog
I
InfoQ
L
LangChain Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
美团技术团队
腾讯CDC
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗

LanYunのBlog

优化macOS Dock栏的显示与隐藏 解决macOS全屏模式下某些情况显示原始鼠标指针的问题 Yarn从Classic迁移到Modern nginx自编译 用santa对二进制进行监控和授权 ESXI 8.0安装黑群晖DSM 7.x openwrt编译过程记录 编译monero For macOS ARM 自建busuanzi不蒜子平台统计平台 浅记博客更新日志 (机翻)Kubo配置文件 修改brew services中服务的启动参数 技术杂记📝 解决Surge模块不能同步问题 为Arch Linux配置邮件服务 自编译NutClient-ESXI,更改邮件逻辑 解决ESXI和群晖使用SSH密钥登录问题 为J4125软路由ESXI中群晖提供UPS服务 在arch linux上搭建rustdesk server 解决虚拟机扩容中GPT PMBR大小不符问题 搭建Tuic V5 优雅地为macOS提供python多版本的支持 修复root路径下文件权限问题 解决macOS 14上利用Whisky运行steam时有关问题 在macOS中用PhpStorm配置Xdebug调试 如何自动续期证书? 从0开始速配VPS用于网站等 搭建一个基于ChatGPT的QQ机器人(Yunzai-Bot) For Mac 010 Editor For Mac 13.0.1 Crack 破解 关于部署Cloudflare Zero Trust遇到的问题浅记录📝
利用CloudFlare Workers快速自建一个IP获取器
LanYun · 2023-03-11 · via LanYunのBlog

前言

本文主要记录如何快速为自己的网站建立一个安全的ip获取器.

关于前面的一些设置Workers操作可以看这篇文章

本文主要给出代码.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113



const ALLOWED_ORIGIN = [/^https:\/\/lanyundev\.com\/$/];

const ALLOW_NO_ORIGIN = false;

const ALLOWED_Referer = [/^https:\/\/lanyundev\.com\/$/];

const ALLOW_NO_Referer = false;

const CACHE_CONTROL = 'public, max-age=2592000';







function validateOrigin(req) {
const origin = req.headers.get('Origin');
if (origin) {
for (let i = 0; i < ALLOWED_ORIGIN.length; i++) {
if (ALLOWED_ORIGIN[i].exec(origin)) {
return true;
}
}
}
return ALLOW_NO_ORIGIN;
}



function validateReferer(req) {
const Referer = req.headers.get('Referer');
if (Referer) {
for (let i = 0; i < ALLOWED_Referer.length; i++) {
if (ALLOWED_Referer[i].exec(Referer)) {
return true;
}
}
}
return ALLOW_NO_Referer;
}






function handleOptions(req) {
const rawOrigin = req.headers.get('Origin');
const rawMethod = req.headers.get('Access-Control-Request-Method');
const rawHeaders = req.headers.get('Access-Control-Request-Headers');

const res = new Response(null, { status: 200 });
res.headers.set('Access-Control-Allow-Origin', rawOrigin);
rawMethod && res.headers.set('Access-Control-Allow-Methods', rawMethod);
rawHeaders && res.headers.set('Access-Control-Allow-Headers', rawHeaders);
res.headers.set('Access-Control-Max-Age', 86400);
res.headers.set('Content-Type', 'application/javascript; charset=utf-8');

res.headers.append('Vary', 'Accept-Encoding');
res.headers.append('Vary', 'Origin');

return res;
}





function handleReject() {


return new Response('[LanYun_Blog] REQUEST NOT ALLOWED', {
status: 403,
});
}

addEventListener("fetch", event => {

const req = event.request;

const validOrigin = validateOrigin(req);
const origin = req.headers.get('Origin');

const validReferer = validateReferer(req);
if ( ( validReferer) || (validOrigin && validReferer && origin) ) {
if (req.method === 'OPTIONS') {
event.respondWith(handleOptions(req));
} else {
event.respondWith(handleRequest(req));
}
} else {
return;
event.respondWith(handleReject());
}
})

async function handleRequest(request) {
const rawOrigin = request.headers.get('Origin');
const ip = request.headers.get("cf-connecting-ip")
res = new Response('var returnCitySN = {"cip": "' + ip + '"};', { status: 200 })
res.headers.set('Access-Control-Allow-Origin', 'https://lanyundev.com/');
res.headers.set('Cache-Control', CACHE_CONTROL);
res.headers.set('Access-Control-Max-Age', 86400);
res.headers.set('Content-Type', 'application/javascript; charset=utf-8');

res.headers.append('Vary', 'Accept-Encoding');
res.headers.append('Vary', 'Origin');
return res
}

你可以根据实际情况,进行修改.

上面代码能够一定程度防止滥用,具有一定安全性.

利用CloudFlare Workers快速自建一个IP获取器

  • WeChat

    WeChat

  • AliPay

    AliPay