代码筑墙:一个普通灵魂的避风港

  • ~3.31K 字


下列这段运行于 Cloudflare Workers 的 Edge 端脚本,是我最近为博客加装的安全防御。通过对客户端 Request 请求头中地理位置标签的解析,实现对特定访问源的精准重定向:

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
export async function onRequest(context) {
const url = new URL(context.request.url);
const path = url.pathname;

// 1. 静态资源过滤(跳过判断,节省配额)
const staticExtensions = /\.(png|jpg|jpeg|gif|css|js|woff|woff2|ico|svg|map|json|xml|txt|webmanifest)$/i;
if (staticExtensions.test(path)) {
return await context.next();
}

// 2. 拦截判断
const country = context.request.headers.get("cf-ipcountry");
const blockedCountries = ["CN"]; // 你的黑名单

if (blockedCountries.includes(country)) {
return new Response(
`<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
<style>
body { font-family: sans-serif; text-align: center; padding: 50px; line-height: 1.6; }
a { color: #007bff; text-decoration: none; }
</style>
</head>
<body>
<h1>403 禁止访问</h1>
<p>抱歉,本网站目前不支持您所在地区的访问。</p>
<p>如有疑问,可联系 <a href="mailto:fairy@fairy.tw">fairy@fairy.tw</a></p>
</body>
</html>`,
{
status: 403,
headers: { "content-type": "text/html;charset=UTF-8" },
}
);
}

return await context.next();
}

看着终端里这段刚刚部署完毕的代码,我自嘲地笑了笑。几行简单的逻辑,就将某些特定的流量彻底隔绝在了我的数字世界之外。

我主页托管的不过是一个最纯粹的静态博客:没有互动评论区,没有单篇文章的浏览量统计,甚至连基本的后端数据库都没有。但即便简陋至此,我依然选择亲手按下了这个“地区屏蔽键”。这几行代码背后延伸出的,不是高深的技术博弈,而是一个普通人在不安全的环境里,最本能的数字防身术。

一、 低成本的防蝇网:防范那些模糊的危险与任意的审判

我身处的环境,虽然没有某些极端国度那般密不透风,但空气中同样弥漫着一种令人压抑的胶着感。

在这里,文字的边界永远是动态的、模糊的、不可预测的。法律和规则往往带有巨大的任意解释空间,你永远不知道自己哪天写下的一句日常随笔,会因为触动了哪根无形的线条,亦或是因为契合了某种不可言说的宏大叙事,而被贴上不被接受的标签。

更让人防不胜防的,是那种无处不在的、病态的“恶意举报文化”。

在缺乏清晰边界的语境下,任何一丝对现实的不满、对职场压榨的吐槽、甚至仅仅是对异国历史的客观记录,都可能成为某些心怀恶意之人手里递上去的刀子。为了避免这些无谓的、由模糊解释带来的现实麻烦,最理智的做法,就是直接切断信息源的触达。

既然我的文字无法改变环境,那我就用几行代码,让环境找不到我的文字。

利用 cf-ipcountry 进行区域拦截,就是一道性价比极高的防蝇网。它不需要多么坚不可摧,它存在的目的,只是为了过滤掉那些甚至懒得翻墙的、最基础的窥探与潜在的现实麻烦。

二、 我不是“编程随想”,我只是一个需要出口的普通人

在独立博客的世界里,“编程随想”是一个近乎神话的存在。他用绝对硬核的技术、近乎偏执的匿名工业化操作,搭建起了一个长达十几年的反抗图腾。如果把对抗系统的标准定到他那个高度,我这几行轻飘飘的 IP 屏蔽代码,确实在各种高阶渗透和国家级审计面前形同虚设。

但我非常清楚,我不是编程随想,我也永远做不到、不想做到他那个程度。

  • 他的博客,是为了匿名和启蒙而生的战壕;
  • 我的博客,从一开始就只是一个记录真实生活、写写日常碎碎念的精神自留地。

我不需要宏大的叙事,不渴望改变世界,更不想要那种伴随着巨大代价的顶流影响力。我只是这个宏大时代里,一个拿着微薄薪水、每天在36小时连轴转的废墟里疲惫挣扎的普通人。

我在这个世界里遭受了太多不合理的卡点、太多职场形式主义的白嫖、以及太多至亲离去时制度给出的冷漠。这些积攒在胸口的不满、委屈与清醒,如果不能在某个干净的地方变成文字敲出来,我的精神可能会先一步在现实的引力下窒息。

我只是想有一个安静的角落,把这些不快写出来,仅此而已。

三、 让文字回归纯净:2800元底薪外的精神流放

这个博客之所以不对全网开放,是因为它承载了我最后的“数字洁癖”。

在我的 PC 上,我看不到任何大厂流氓软件的捆绑,没有多余的社交全家桶,我的信息来源干净得只剩下纯粹的官方文档和 YouTube。我既然在软件生态上追求绝对的纯正,那么在精神产出上,我也希望它远离任何污染。

把“CN”从我的访问日志里抹去,本质上是一场精神上的主动流放
我主动放弃了在原生土壤里获得共鸣的可能,换取的是一个不会被随手举报、不会被无理卡审、不需要自我阉割和熟练使用谐音缩写词的纯净创作环境。

当那些静态页面通过 Cloudflare Pages 的全球节点分发出去时,我知道,它们正躺在一个完全符合法治、边界清晰、且不被日常恶意所干扰的赛博旷野里。

四、 结语:守住那张没有KPI的“折叠床”

现实生活里,单位只肯给我一张狭窄冷冰冰的折叠床,还要在不给一分钱的前提下白嫖我唯一的休假日。在这个由工时、流程、和合同续签审批构成的牢笼里,我的身体不得不配合他们的规则去演戏。

但在网络的那端,在这个由几行 Worker 代码守护着的虚拟空间里,我才是绝对的、神圣不可侵犯的主宰。

我的影响力很小,小到只惊得动几只现实里的苍蝇,所以这道简陋的防火墙目前看已经绰绰有余。我配合了现实的引力去拿我维持生计的面包,同时用这段拦截代码,在虚拟的世界里为自己的灵魂签发了一张“永久休息条”。

代码部署完毕,缓存已经刷新。从现在起,外面的世界继续疯狂地运转,而我,将在这个被屏蔽保护起来的乌托邦里,继续清醒地、毫无顾忌地,写下我对这个世界所有的不满与深情。