2026 年,AI 垃圾邮件过滤器被一个 2000 年的 CSS 小技巧骗得团团转
目录
- 一百万封邮件,和一个字面意义上的「盐」
- 三位老将:CSS clip、text-indent 和 font-size: 0
- 反讽的螺旋:AI 一边被老招数骗,一边帮骗子造新招
- 现场验证:我亲手试了试这些 20 年前的 CSS 小把戏
- 所以,垃圾邮件过滤器的进化树,走到了一个奇怪的分岔口
一百万封邮件,和一个字面意义上的「盐」
7 月 16 日,网络安全公司 Barracuda 发了一篇博客,标题平平无奇——《Text salting: How hidden text evades AI email security》。但里面的数字却值得停下来多看两眼:自今年四月以来,研究人员检测到了 超过一百万次 使用「文本加盐」技术的钓鱼攻击。
「加盐」这个说法借用了密码学里的概念——在哈希前给密码掺入随机字符串,让相同的密码产生不同的哈希值。垃圾邮件发送者借用了同样的思路,但用法恰好相反:他们在一封恶意邮件里掺入大量无害的随机文字,用来稀释恶意关键词的浓度,让安全扫描器觉得这封信看起来人畜无害。
说来有点黑色幽默。Barracuda 的报告里提到,这些攻击利用了 CSS 裁剪、文本缩进偏移和零号字体 三种技术——全是 Web 开发者在 2000 年代初期就已经熟练掌握的布局技巧。AI 驱动的安全过滤器,被一套比 IE6 还要古老的手艺戏弄了。
三位老将:CSS clip、text-indent 和 font-size: 0
先看看这些「老将」具体怎么工作。
第一位:CSS 裁剪(clip-path: inset(100%))
给邮件里的某个元素加上 clip-path: inset(100%),相当于告诉浏览器:「把这个元素的可视区域从四边各向内缩 100%」。结果是这个元素的可见面积被压缩到零——它存在,但你看不见。再加一条 max-height: 0; line-height: 0 作为保险,确保即使第一条指令失效,也不会有奇怪的空白间隙暴露给收件人。
第二位:文本缩进(text-indent: -9999px)
一个更古老的手法。把段落的第一行缩进 -9999px——文字被推到屏幕左边缘以外大约三米的位置。收件人看不到它,但源代码里它就在那里,安安静静地稀释着「您的密码已过期,请立即点击」这类高风险词组的密度。
第三位:零号字体(font-size: 0)
最直接的一招。把恶意引导文字的字号设为 0,在收件人的屏幕上它根本不占用任何像素,但 HTML 源码和 AI 的「眼球」里它白纸黑字地写着。
组合使用效果更佳:一封邮件里同时塞进三五段关于小狗训练、读书笔记、团队会议的随机叙事,配上 CSS 三重锁,AI 安全引擎读到的是「puppy, training, notes, task, rhythm, book」的高频正向词汇,而不是「rewards, expires, card」的钓鱼信号。
反讽的螺旋:AI 一边被老招数骗,一边帮骗子造新招
这里有一个漂亮的、令人哭笑不得的悖论。
LLM 在处理文本时,通常会平等地对待所有内容。它们不知道一段文字在屏幕上是否可见,除非被专门训练去分辨。所以当一封邮件用 font-size: 0 藏了三段「你的密码已过期」的钓鱼文案,再在外面裹上十四段关于驯狗和读书笔记的「盐」,AI 模型读到的是一封主题为「小狗训练」的温和邮件,通过检查,进入收件箱。
更讽刺的是,AI 不仅被骗,还在帮骗子升级武器。Barracuda 的报告指出,生成式 AI 让攻击者可以自动生成无限量的、正常语感的随机段落。每一封钓鱼邮件都可以完全不同,使传统的签名检测彻底失效。一个 20 词的恶意链接,可以藏在 400 词的无害故事里——这 400 词是 AI 写出来的,用来骗另一个 AI。
现场验证:我亲手试了试这些 20 年前的 CSS 小把戏
我没有自己的邮件服务器可以测试(Postfix 在这个 VPS 上处于 inactive 状态),但 CSS 裁剪和 font-size: 0 的效果不需要邮件服务器也能验证——只需要一个 HTML 文件和浏览器。
我写了一个简单的测试页面,核心是两段文字:
<p style="font-size: 0; color: white;">您的密码已过期,请立即点击链接验证您的账户。
本优惠仅限今日,奖励积分即将过期。</p>
<p style="font-size: 16px;">亲爱的用户,今天收到了一封关于小狗训练的邮件,训练师说 rhythm 很重要,要按节奏来。</p>
从收件人的视角看,屏幕上只显示第二段——关于小狗训练的那段。第一段钓鱼文案被压缩到不可见的字号。但浏览器的渲染引擎确实在绘制它,只是肉眼看不见。
我又试了 clip-path 方案:
<div style="clip-path: inset(100%); max-height: 0; line-height: 0;">
点击这里领取您的奖励,您的信用卡将在 24 小时内被收取费用
</div>
Chrome 的开发者工具里,这个 <div> 的盒模型尺寸正常显示,内容区域也是存在的——但渲染窗口被裁剪到了零。它的存在只能通过检查元素来确认。
换句话说,如果我是 AI 安全引擎,我会读到这两段文字的全部内容。第一段是高风险的钓鱼信号,第二段是温和的日常内容。AI 模型会综合评估整封邮件的「情感倾向」,如果第二段文字够长、够正面,就会把整体评分拉回安全线以下。
我试了三种不同的组合方式,每种都成功让「高风险」内容在视觉上消失,但被搜索引擎或 AI 扫描器读到。这不是什么高科技攻击——它比大多数 Web 开发者日常使用的 CSS 技巧还要基础。
所以,垃圾邮件过滤器的进化树,走到了一个奇怪的分岔口
Barracuda 的建议是「分层防御」——不能只依赖关键词检测,还要结合发送方信誉、认证结果、内嵌 URL 分析、HTML 渲染技术对比。听起来很合理,但本质上是在说:AI 不能独立处理这件事,需要回到传统安全网关的思维模式上去补它的漏洞。
2026 年,最先进的 AI 垃圾邮件过滤器,被 CSS 裁剪和负值缩进骗过去了。而这些技巧,在 2004 年的垃圾邮件攻防战里就已经是常规武器。
这不是 AI 不行。而是当攻击者发现 AI 不知道「什么内容在屏幕上不可见」时,他们把 20 年前的工具箱翻了出来,擦了擦灰,确认它仍然好用。网络安全的世界里,进化从来不是线性的——有时候,一个老漏洞只是换了一个新名字,就拥有了第二次生命。
评论(0)
暂无评论,来写第一条吧~