Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

会反击的过滤器

原文:Filters that Fight Back
作者:Paul Graham 发表:2003-08
译者:Claude(baoyu-translate)

2003 年 8 月

让贝叶斯垃圾邮件过滤器追访邮件里的链接、看看那一头有什么在等着,也许能提高它们的准确率。death2spam(反垃圾邮件软件)的 Richard Jowsey 现在已经在判断不清的边缘案例里这么做了,他的反馈是效果不错。

为什么只在边缘案例里这么做?又为什么只追访一次?

正如我在《过滤器会杀死垃圾邮件吗?》里提到的,把一封垃圾邮件里的所有 URL 都追访一遍,会有一个有趣的副作用:如果主流邮件客户端都用这种方式来过滤垃圾邮件,发垃圾邮件者的服务器会被狠狠地砸一顿。我越想越觉得这是个好主意。这不只是有趣——很难想象还有什么对发垃圾邮件者更精准的反击。

所以我想给那些在做垃圾邮件过滤器的人提一个新功能:一个“惩罚“模式——只要打开它,过滤器就会把每封可疑垃圾邮件里的每个 URL 抓取 n 次,n 由用户自己设。 [1]

许多人指出过:今天邮件系统的一个问题是它太被动了——你说什么它就做什么。到目前为止,所有针对这个问题的解决方案似乎都涉及新协议。这一招不需要。

如果广泛使用,自动追访的垃圾邮件过滤器会让邮件系统反弹。垃圾邮件那种巨大的发送量,本来一直在帮发垃圾邮件者赚钱——现在反而会反咬他自己一口,像一根树枝弹回打到他脸上。自动追访的过滤器会推高发垃圾邮件者的成本,压低他的销售额——他的带宽用量会飙到屋顶,他的服务器会在压力下卡死,结果就是那些本来会响应这封垃圾邮件的人也访问不了他了。

一小时发一百万封邮件,你的服务器一小时就被打一百万下。

我们当然要确保这只针对可疑的垃圾邮件。一般来说,任何被发给数百万人的 URL,多半就是垃圾邮件 URL;所以“自动请求每封邮件里的每个 HTTP 链接“这种做法,绝大多数情况下都没问题。但有少数情况例外:比如雅虎邮箱、Hotmail 这类免费邮件服务在邮件底部加上的 URL。

为了保护这些站点、并防止这套机制被滥用,自动追访应该和“被垃圾邮件推广的站点“的黑名单结合起来。只有黑名单上的站点才会被抓取;只有经过人工审核的站点才会被加进黑名单。一封垃圾邮件的生命周期至少有几小时,所以应当来得及更新这种名单,去阻断一封正在推广某个新站点的垃圾邮件。 [2]

大量自动追访只对高带宽连接的用户切实可行,但这种用户已经够多,足以给发垃圾邮件者制造大麻烦。事实上,这套方案漂亮地映射出了问题本身。垃圾邮件的问题在于:为了触达少数容易上当的人,发垃圾邮件者把信发给所有人。那些不容易上当的收件人不过是附带伤害。而不容易上当的多数人只要还无法阻止(或者威胁阻止)容易上当的少数人去响应它,就只能继续收垃圾邮件。自动追访的过滤器,正好给了他们一种办法。

这能消灭垃圾邮件吗?还差一点。最大的那批发垃圾邮件者大概有办法保护自己的服务器,对抗自动追访过滤器。然而,他们做这件事最便宜、最省事的办法,就是在邮件里放上一条真的能用的退订链接。对于那些小喽啰、以及那些雇人替自己推广的“正经“站点来说,这甚至会是必需。所以,如果自动追访的过滤器铺开,它们其实就成了“自动退订“的过滤器。

在这种局面下,垃圾邮件就会和系统崩溃、病毒、弹窗一样,沦为一种只折磨那些懒得用对软件的人的瘟疫。


注释

[1] 自动追访的过滤器必须能跟随重定向,并且在某些情况下(例如一个页面只写着“点这里“)必须跟到不止一层链接。还要确保发出的 HTTP 请求和主流浏览器的请求无从区分——包括请求顺序和 referrer(HTTP 头:来源页)。

如果在 x 时间内没收到响应,默认按一个相当高的垃圾邮件概率处理。

n 与其设成常数,不如设成“已观察到提到该站点的垃圾邮件数量“的函数。这样能为防滥用、防误伤再加一层保护。

[2] 本文最初版本里用的是“白名单“而不是“黑名单“。虽然它们其实按黑名单的方式工作,我当时偏好叫白名单——也许这样在法律层面更不易被攻击。但事实证明,这只让读者更糊涂。

恐怕该有多份黑名单。单点故障在攻击和滥用面前都很脆弱。


致谢 Brian Burton、Bill Yerazunis、Dan Giffin、Eric Raymond、Richard Jowsey 通读初稿。