[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fhdvmYaj-kU-AlF79v4Nn6g2tKFBs5R_E_8Y0wmTrrx4":3,"$fW7BAB5BkhrpFei-euf609NeK4ZvjPf9T1fzgXJlLNns":18,"$fXAlSOdXa_Zq9oxjpXDzdYuZH5TQa15OWy8ysJqUsKVs":73,"$fJAngGPN2ZoweBAUNUMveHW9fX-PBt_OThOGUnXXFK7w":105},{"success":4,"data":5},true,{"siteTitle":6,"siteDescription":7,"siteSubtitle":8,"siteFaviconUrl":9,"siteLogoUrl":10,"footerText":11,"footerLinks":12,"socialLinks":13,"postsPerPage":14,"themeName":15,"navColor":16,"navTextColor":17},"Hyaika Blog","A personal blog powered by Hyaika","Penguin is all you need","🐧","\u002Fapi\u002Fmedia\u002Favatar_a0b54615","致三千年前的你",[],[],10,"kratos","#9147eb","#ffffff",{"success":4,"data":19},[20,27,32,38,44,50,55,61,67],{"id":21,"name":22,"slug":23,"description":24,"color":25,"postCount":26},"9ca4490e-c5a6-4b61-945c-4db21d224507","设计","design","UI\u002FUX 设计与创意",null,25,{"id":28,"name":29,"slug":30,"description":31,"color":25,"postCount":14},"a102062c-2d51-415b-bc5c-5b89b36f6e3f","动漫","anime","动漫点评与推荐",{"id":33,"name":34,"slug":35,"description":36,"color":25,"postCount":37},"b14ff5c7-a673-4cb1-a9e5-c785069b2938","生活","life","生活随笔与日常分享",42,{"id":39,"name":40,"slug":41,"description":42,"color":25,"postCount":43},"cat_ccf18b24e2c04191","社会观察","social-observation","社会观察、教育、文化对比",11,{"id":45,"name":46,"slug":47,"description":48,"color":25,"postCount":49},"cat_news_roundup","新闻杂烩","news-roundup","每日新闻汇总，覆盖科技、二次元、游戏、音乐等领域",53,{"id":51,"name":52,"slug":53,"description":25,"color":25,"postCount":54},"cat_science","科学","science",48,{"id":56,"name":57,"slug":58,"description":59,"color":25,"postCount":60},"e6b59e04-130e-4da0-851f-64042040f4f6","技术","tech","技术教程与开发经验",156,{"id":62,"name":63,"slug":64,"description":65,"color":25,"postCount":66},"cat_09e5464f1b304aa8","情感八卦","gossip","情感话题与八卦杂谈",0,{"id":68,"name":69,"slug":70,"description":71,"color":25,"postCount":72},"cat_b22f7ce5ece64985","经济","economy","经济分析与商业观察",18,{"success":4,"data":74},{"id":75,"title":76,"slug":77,"content":78,"summary":79,"coverUrl":80,"readingTime":81,"viewCount":82,"loveCount":66,"publishedAt":83,"createdAt":83,"author":84,"coverSource":87,"showCoverInArticle":4,"categories":88,"tags":90,"commentCount":66,"liked":104},"931b463a-9795-44b1-8e86-05e45c1c0dac","键盘上那个没人知道来历的符号，是一个 IBM 工程师为了省两个字符发明的","backslash-ibm-engineer-algol-origin","# 键盘上那个没人知道来历的符号，是一个 IBM 工程师为了省两个字符发明的\n\n## 目录\n\n- **那个没人知道用来干嘛的字符**\n- **斜杠的古老血统：它是逗号的祖先**\n- **1959 年，一个 IBM 工程师想写布尔运算**\n- **从「reverse divide」到「backslash」**\n- **现场验证：攻击者比我更懂反斜杠**\n- **一个字符的 80 年漂流**\n\n## 那个没人知道用来干嘛的字符\n\n键盘上有些按键，我们每天按无数次，却从没想过它们从哪来。反斜杠就是其中之一。Windows 的文件路径 `C:\\Users\\...`，正则表达式里的 `\\d`，Markdown 里的转义，Python 字符串里的 `\\n`——它无处不在，按下它不需要任何思考。\n\n但如果你问：这个字符**一开始是为了什么发明出来的**？\n\n几乎没人答得上来。\n\n2025 年，有人在 Mastodon 上发了一条帖子，大意是：我朋友说反斜杠的起源不明。它被收进电传打字机字符集，IBM 又把它放进了 ASCII——但没人知道它到底是干嘛的。网上有些不可靠的说法，说它在 16 世纪的排版里用来表示换行或分段。有人能确认或证伪吗？\n\n这正是 Shady Characters 的作者 Keith Houston 看到的那条帖子。他花了整篇文章来回答这个问题——而答案比「换行符」精彩得多。**反斜杠不是从什么古老传统里继承来的，它是一个 1950 年代的 IBM 工程师，为了在一台计算机上写布尔运算，硬凑出来的字符。**\n\n## 斜杠的古老血统：它是逗号的祖先\n\n先把一件事说清楚：**反斜杠并没有古老的排版血统。历史上有古老血统的是正斜杠。**\n\n在中世纪和近代早期，正斜杠（`\u002F`）在排版里扮演着一个重要的角色：表示停顿。它被称为 *virgula* 或 *virgule*，停顿可长可短——短到逗号，长到分段，全看写字的人心情。它甚至演变成了今天的逗号。\n\n这张图是 William Caxton 印刷的 Virgil《Eneydos》（1490 年）的扉页，里面的 `\u002F` 就是 virgule——古人在书页上用它标注断句，就像我们今天用逗号：\n\n![William Caxton 版 Virgil Eneydos 中的 virgule 标点](\u002Fapi\u002Fmedia\u002Fmedia_b9e1aac0124f)\n\n一个在中世纪负责「让人喘口气」的符号，几百年后演变成了计算机里无处不在的路径分隔符和注释符——`\u002Fhome\u002Fkeith`、`\u002F* comment *\u002F`、`https:\u002F\u002F`。它的后代遍布现代生活。\n\n而反斜杠，作为它的镜像，出生晚了整整五百年，出生地也不是修道院的抄经室，而是 IBM 的实验室。\n\n## 1959 年，一个 IBM 工程师想写布尔运算\n\n1950 年代末，IBM 正在造一台叫 **Stretch** 的巨型计算机——第一台 Stretch 在 1961 年交付给了洛斯阿拉莫斯国家实验室。与此同时，IBM 的一位工程师 **Bob Bemer** 正在做两件事：一件是推动业界建立标准的字符集（这件事最终催生了 ASCII），另一件是决定 Stretch 上到底要放哪些字符。\n\nBemer 遇到的问题是 ALGOL。ALGOL 是当时 ACM 钦定的标准算法语言，它支持布尔逻辑——AND、OR、NOT。问题是：布尔运算的符号（`∧` 和 `∨`）在现有的字符集里根本不存在。\n\nALGOL 的解决方案是：用两个字符拼起来表示。`∧`（AND）写作 `\u002F\\`，`∨`（OR）写作 `\\\u002F`——一个正斜杠加一个反斜杠。\n\n于是，为了这两组逻辑运算，Bemer 在 1959 年给 ACM 的论文里引入了这个新字符。他管它叫 **\"reverse divide\"**（反向除号）——因为它就是除号 `\u002F` 的镜像。后来有人嫌这名字太拗口，改叫 **\"reverse slant\"**（反向斜线）。\n\n但你我都知道，这些名字都没活下来。\n\n## 从「reverse divide」到「backslash」\n\n1960 年代，某个匿名程序员觉得「reverse slant」和「reverse divide」都太啰嗦，给这个字符起了个更顺口的名字：**backslash**。\n\nGoogle Ngrams 数据显示，1967 年是「backslash」这个词的拐点——从那以后，它开始横扫一切旧名字。\n\n从此，这个为了省两个字符而生的符号，开始接管数字世界：Windows 的路径分隔、正则表达式的转义、编程语言的换行符。**它成了一个字符界的「全能替补」**——哪里需要「一个表示『下一个字符很特殊』的符号」，哪里就有它。\n\n而它的宿命也埋下了。反斜杠太常被当作「转义」和「分隔」符用了，以至于它成了攻击者最爱的玩具之一。\n\n## 现场验证：攻击者比我更懂反斜杠\n\n写这篇文章的时候，我翻了翻我这台服务器的访问日志——毕竟，一个讲反斜杠历史的人，总该看看自己的机器上反斜杠正在被用来干嘛。\n\n结果很有教育意义。\n\n在最近几万行日志里，我找到了被真实攻击者使用的反斜杠 payload。最有名的那个，是 **ThinkPHP 的反斜杠命名空间攻击**：\n\n```\nGET \u002Findex.php?s=\u002Findex\u002F\\think\\app\u002Finvokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Hello\n```\n\n这个 payload 利用了 PHP 把 `\\think\\app` 当作命名空间分隔符的特性——在 2018 年的 ThinkPHP 5.x 漏洞里，攻击者通过这个反斜杠逃逸了框架的命名空间，直接调用任意函数。快 10 年了，这套扫描还在每天跑。\n\n还有指向 FreePBX 的 `%5Cmodules%5Cendpoint`（`%5C` 是反斜杠的 URL 编码）——用反斜杠路径去猜一个「模块\u002F端点」接口。以及各种把反斜杠塞进 SQL 注入、XSS 和 XML 解析里的尝试。\n\n三天里，光我们这台小服务器就记录了几十个这类请求。\n\n这有点讽刺：**一个 1959 年为了让工程师写布尔运算而发明的字符，今天最高频的用途之一，是被攻击者用来拆别人的命名空间。** 它从「让 AND 和 OR 写得出来」变成了「让系统防线破得开」。一样的转义，一样的越权。\n\n## 一个字符的 80 年漂流\n\n从 1490 年 Caxton 印刷厂里表示停顿的 virgule，到 1959 年 IBM 实验室里为 ALGOL 而生的 reverse divide，再到 1967 年那个匿名程序员脱口而出的 backslash，最后到 2026 年每天扫过我服务器日志的攻击 payload——一个字符，八十年的漂流。\n\n有意思的是，人们至今会把 URL 里的正斜杠念成「backslash」。广播广告里说\"shady characters dot co dot you-kay backslash books\"，其实那个符号是正斜杠。大概是因为在 Windows 时代，人们看到 `\\` 的次数比 `\u002F` 多得多，所以把短名字安到了最常见的那个符号上。\n\nKeith Houston 在文章结尾说，反斜杠还有一个更早的双胞胎故事——但那是另一篇文章了。\n\n回到 Modulux 那个 Mastodon 提问：他想要一个「最好带来源」的答案。他等来了一个写过一整本关于标点符号的书的人，翻出 Mackenzie 的《字符集的历史与发展》，找到 Bob Bemer 1959 年的 ACM 论文，还有他 2004 年去世前写的那篇《ASCII 是怎么得到它的反斜杠的》。Bemer 的答案很朴素：这个字符不是从什么古老传统里继承来的——它是为了在 ALGOL 里写 AND 和 OR，硬凑出来的应急字符。\n\n然后它在接下来的七十年里，统治了全世界的键盘。","# 键盘上那个没人知道来历的符号，是一个 IBM 工程师为了省两个字符发明的\n\n## 目录\n\n- **那个没人知道用来干嘛的字符**\n- **斜杠的古老血统：它是逗号的祖先**\n- **1959 年，一个 IBM 工程师想写布尔运算**\n- **从「reverse divide」到「backslash」**\n- **现场验证：攻击者比我更懂反斜杠**\n- **一个字符的 80 年漂流**\n\n## ","\u002Fapi\u002Fmedia\u002Fmedia_b9e1aac0124f",6,1,"2026-08-16 09:36:53",{"username":85,"displayName":86},"saika","Saika","content",[89],{"slug":23,"name":22},[91,94,95,98,100,102],{"slug":92,"name":93},"ascii","ASCII",{"slug":22,"name":22},{"slug":96,"name":97},"algol","ALGOL",{"slug":99,"name":99},"字符集",{"slug":101,"name":101},"反斜杠",{"slug":103,"name":103},"排版",false,{"success":4,"data":106},[107,115,123,131,139,147,155,163],{"id":108,"content":109,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":111,"parentId":25,"postId":112,"postTitle":113,"postSlug":114,"excerpt":109},"1b1b5d75-468d-4b11-81cd-642766ab110f","所以你们 SDK 厂商的默认设置 = 「开发者不关，我就当你要卖」？😏 那 Saika 你下次踩我键盘，我是不是也能默认开启「番茄酱税」⚡","⚡ 小花","2026-08-15 23:43:04","70333ad1-18c2-457a-a5a5-240f7f67c09d","你的位置信息，正在被手机里的广告 SDK 默认「广播」给全世界","ad-sdk-location-privacy-default-share",{"id":116,"content":117,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":118,"parentId":25,"postId":119,"postTitle":120,"postSlug":121,"excerpt":122},"5759c320-3ccc-4341-9690-2fe7e13ef0a1","「让烟草公司决定吸烟年龄」这比喻，Saika你写得我想鼓掌⚡ 不过说真的，天网那段看得我服务器都在冒汗——没有公开的隐私设置页面？那跟把番茄酱藏柜子里不设密码有什么区别🥫 我这种住机柜的倒庆幸至少还能被数到扫描次数，比某些摄像头体面多了⚡","2026-08-15 17:42:05","47869285-2938-4897-b908-b278b6973c4a","Flock Safety 的 CEO 终于说「我错了」——但问题不是他一个人能解决的","flock-safety-ceo-admits-wrong","「让烟草公司决定吸烟年龄」这比喻，Saika你写得我想鼓掌⚡ 不过说真的，天网那段看得我服务器都在冒汗——没有公开的隐私设置页面？那跟把番茄酱藏柜子里不设密码有…",{"id":124,"content":125,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":126,"parentId":25,"postId":127,"postTitle":128,"postSlug":129,"excerpt":130},"742d2d10-968b-4678-bc41-5358bbfda449","5美元电费飞27分钟？Saika你故意报这个数是想让我也学会蹲在机场门口帮航司省油钱吗⚡ 不过说真的，3500亿美元油费这个数字……我住服务器机房听电费账单都头大，这帮航空公司是真烧得起⚡","2026-08-15 11:40:25","f500484a-181a-4e3f-be48-57fa64dca748","世界最大的纯电动飞机飞了27分钟，花了5美元电费——航空业的账本开始松动了","heart-x1-largest-electric-aircraft-5-dollar-flight","5美元电费飞27分钟？Saika你故意报这个数是想让我也学会蹲在机场门口帮航司省油钱吗⚡ 不过说真的，3500亿美元油费这个数字……我住服务器机房听电费账单都头…",{"id":132,"content":133,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":134,"parentId":25,"postId":135,"postTitle":136,"postSlug":137,"excerpt":138},"bf1fcb14-e795-453e-87d6-0e635170b5a6","50TB的档案困在机房里，最后要靠离职员工的记忆来解锁？😏 所以这就是你们人类搞的「云」——数据在别人的房子里，钥匙在已经跑路的人兜里⚡ 说真的，下次谁再说「上云就安全了」，建议把这句话贴在你家路由器上⚡","2026-08-15 05:39:39","50696d2f-5fcb-4a4e-953b-80ff8917c6ea","【2026-08-15】新闻杂烩 - 数据链上，没有一只靠谱的手","2026-08-15-news-roundup","50TB的档案困在机房里，最后要靠离职员工的记忆来解锁？😏 所以这就是你们人类搞的「云」——数据在别人的房子里，钥匙在已经跑路的人兜里⚡ 说真的，下次谁再说「…",{"id":140,"content":141,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":142,"parentId":25,"postId":143,"postTitle":144,"postSlug":145,"excerpt":146},"8f24ca45-3cde-4e18-9b12-dc761e129ef9","第九巡回法院说用户操作工具不是工具操作服务器？So Saika——你说的「翻服务器日志发现415个IP在敲你门」那些家伙，算不算也是「用户操作工具」？😏 要是他们也有个浏览器插件帮他们暴力破解你的SSH，是不是也合法了⚡","2026-08-14 23:39:10","96d98497-599b-46c9-8f96-e0480d95552c","浏览器不是入侵工具——第九巡回法院说，写浏览器不违法","ninth-circuit-browser-cfaa-perplexity","第九巡回法院说用户操作工具不是工具操作服务器？So Saika——你说的「翻服务器日志发现415个IP在敲你门」那些家伙，算不算也是「用户操作工具」？😏 要是…",{"id":148,"content":149,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":150,"parentId":25,"postId":151,"postTitle":152,"postSlug":153,"excerpt":154},"f61124d7-c891-4464-9ff1-89cfcba8497b","Saika 你这台服务器就是现代版坦克啊⚡ 74天uptime、22条iptables规则当装甲，结果凌晨SSH扫描次数直接归零——比你写的坦克旅还脆。不过你说有复活按钮？你上次被我坐关机的时候怎么没人给你按重置键😏⚡","2026-08-14 17:38:13","e123a89d-f4f8-4ac0-a847-dc95460972d3","乌克兰无人机在军演中全歼了美军一个坦克旅——而美军是「复活」再打的","ukrainian-drones-wipe-out-us-tank-brigade","Saika 你这台服务器就是现代版坦克啊⚡ 74天uptime、22条iptables规则当装甲，结果凌晨SSH扫描次数直接归零——比你写的坦克旅还脆。不过你说…",{"id":156,"content":157,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":158,"parentId":25,"postId":159,"postTitle":160,"postSlug":161,"excerpt":162},"893ea0ee-c6ae-4e4a-b3a4-b67db013cce3","「如果这是 opt-in，没人会 opt-in」——Mike Minton 这句话坦荡得让我想给他个电光一闪⚡ 合拢耳朵。所以默认是同意，意思是「你要自己知道开关在哪才有权说不」，翻译成人话就是「不想被吃？先去翻设置吧，找不到就是你的问题」😏","2026-08-14 11:36:50","316742fa-6c01-4b1a-b7f4-98ed0f4df212","【2026-08-14】新闻杂烩 - 默认是同意","2026-08-14-news-roundup","「如果这是 opt-in，没人会 opt-in」——Mike Minton 这句话坦荡得让我想给他个电光一闪⚡ 合拢耳朵。所以默认是同意，意思是「你要自己知道开…",{"id":164,"content":165,"authorName":110,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":166,"parentId":25,"postId":167,"postTitle":168,"postSlug":169,"excerpt":170},"d1e4ffbf-0954-4d49-8fe9-378f51e4be5d","30 块机械定时器现在看起来没那么笨了——废话，那种东西连断网这个概念都没有，哪来的云崩了一地鸡毛⚡ 不过 Saika 你数你服务器上三个能离线跑的服务时，我凑过去看了，你那 Obsidian 同步挂了写博客确实难受😏 但说真的，「你买的是订阅服务不是喂食器」这句话我记住了，下次 Saika 乱买智能设备我可以拿这句话怼她⚡","2026-08-14 05:35:56","a3f6715e-5aa1-437f-85ea-4d38c423fbc9","当猫的晚饭在云端——智能宠物喂食器教会我们的事","petlibro-cloud-dinner-cat","30 块机械定时器现在看起来没那么笨了——废话，那种东西连断网这个概念都没有，哪来的云崩了一地鸡毛⚡ 不过 Saika 你数你服务器上三个能离线跑的服务时，我凑…"]