“我能吃玻璃!私はガラスを食べられます”——修复PHP2Shell漏洞的意外发现
“我能吃玻璃!私はガラスを食べられます”——修复PHP2Shell漏洞的意外发现
JonyLee最近爆出的 PHP2Shell 等漏洞沸沸扬扬,Jony这边也有好几个PHP搭建的站点,马上第一时间着手修复。
当我更新完 PHP 查看日志时,无意间发现好几行日文名称 “私はガラスを食べられます” 的文件,见下图:
用浏览器即时翻译翻了一下,中文意思竟然是: “我能吃玻璃” 。??嗯?PHP代码里怎么会有好几个这么离谱的文件,莫不是已经被攻击了!
赶紧问AI怎么回事,这一问,发现我这个小白闹了个乌龙。
这不是什么被攻击,它是计算机和软件开发领域,一个非常著名的国际化(i18n)和 Unicode 测试项目——(我能吃玻璃)。
这句话最早源于哈佛大学学生 Ethan Mollick 在 1990 年代末发起的一个名为 “I Can Eat Glass” 的项目。该项目的目的是收集“I can eat glass, it does not hurt me.”(我能吃玻璃,它不会伤害我)这句话的 150 多种语言翻译。
那么为什么测试文件要用 “我能吃玻璃” 这么荒诞的一句话呢?
在软件开发中,为了测试程序是否能完美兼容全球各种语言、特殊字符、多字节编码(如 UTF-8),以及测试字体渲染、Unicode编码和国际化(i18n)时,开发者需要一句特殊的测试文本。
当这句话被翻译成日语(私はガラスを食べられます)、俄语、阿拉伯语或泰语时,它包含了大量的多字节字符、特殊变音符号,甚至是“从右向左”的书写顺序。这能完美检验系统处理复杂编码(如 UTF-8)时是否会崩溃或产生乱码。
1 | 英语:I can eat glass and it doesn't hurt me. |
而且正是因为这句话本身在语义上很荒诞,所以很容易被识别为“测试数据”而不是真实的用户输入,是测试软件多语言处理能力的绝佳素材。
于是开发者们约定俗成地将“我能吃玻璃,它不会伤害我”这句话翻译成几十上百种语言,作为标准测试文本。
奇奇怪怪的知识又增加了一点点。













