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

推荐订阅源

罗磊的独立博客
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
量子位
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
Jina AI
Jina AI
L
LangChain Blog
M
MIT News - Artificial intelligence
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学

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