对付 Web 上的垃圾信息,科学的技术和技巧很重要。在本专栏 前一期文章 中,我介绍了如何使用工作流对付垃圾信息机器人程序,并且最好不会给正当使用的用户带来任何不便。在本篇文章中,我将讨论垃圾信息的其他方面的问题,比如内容网站间的关系以及垃圾信息受害者如何能够展开协作来对抗垃圾信息散布者。
对付 Web 垃圾信息最有效的方式是通过社区行动。垃圾信息是一种大规模的攻击,所以迫切需要大规模的抵抗。如果社区能协助发现并揭露垃圾信息散布者的行为和内容模式,那么这些模式经过共享就能让机器人程序无法或不容易奏效。社区尤其适用于用前一期文章中介绍的方法仍无法对付的其他形式的垃圾信息。首先,我先花点时间介绍回链垃圾信息。
Weblog 以及其他 Web 文章的目的是为了共享见解和发现。有些时候,受某篇博客条目的启发,人们会直接在 Weblog 上留下评论。有时,人们则会将这篇博客条目引用到自己的条目或文章中,而 linkback 是一种技术术语,用于通知您与之建立链接的另一个站点。它是一种网络信号,就好象 “ping” 的作用,声明了一个条目和另一个条目之间的关系,有助于读者找到相关的内容。但是,linkback 也为垃圾信息散布者提供了滥用 Weblog 的可乘之机,这些散布者会发送所谓的 “sping”(即 “spam ping” 的缩写)。linkback 有三种常见类型,而且全部存在与垃圾信息相关的问题。
Refback:当 Web 浏览器用户单击链接从一个页面转到另一个页面时,对第二个页面的请求包含一个 HTTP 头(它被称为 referrer)以及第一个页面的 URL。该过程也被称为 “refback”。第二个站点可能会跟踪 refback,可能会贴出 refback 的列表,甚至可能 会跟随 refback 到原始站点并提取诸如标题、元数据、链接文本以及其他围绕此链接的文本等信息。垃圾信息散布者利用这一点来在合法站点上嵌入其客户的链接以提升该客户的搜索引擎概要文件。他们通过在 referrer 字段内的客户链接来向目标站点发送请求。这被称为 “referrer 垃圾信息”。对付它的常用反击方法是 建立 refback 站点的黑名单。
TrackBack:Refback 依赖于用户跟踪链接,但一些 Weblogger 则希望得到一种更为确定的方式来进行 linkback 通知,主要的 Weblog 软件提供商之一 Six Apart 做到了这点。TrackBack 是一种规范,包含 “发现”(告知在哪以及如何发送 ping)以及使用简单 HTTP 请求的一个 ping 过程。TrackBack 的告知和发现都是嵌入在页面评论部分的 Resource Description Framework (RDF) 信息。作者对一个条目的引用将会导致向被告知的端点发送一个 ping。TrackBack 已经在 Weblogger 中十分流行,垃圾信息散布者于是紧跟 Weblogger 而至。垃圾信息散布者将会在 Weblog 爬行以寻找 TrackBack 侦听程序并向其客户站点发送假的通知。TrackBack 垃圾信息的问题太大了以至于很多 Weblog 不得不禁用 TrackBack,就如同有些站点禁用了 Weblog 条目上的评论表单一样。TrackBack 垃圾信息的应对措施类似于本文稍后要介绍的内容分析以及抵御评论垃圾信息的黑名单对策。
Pingback:Pingback 与 TrackBack 非常接近,只不过通知消息的格式是 XML-RPC 请求而不是简单的 HTTP 请求。发现机制也更为完善,使用的是 HTML 链接或 HTTP 头,而不是嵌入的 RDF。最后一点,Pingack 的接收者会跟随这个 ping 的过程回到原始站点以确保在该站点的确具有这样一个链接,而只这一步就能清除很多垃圾信息散布者。虽然可实现 TrackBack 来执行这样的检查,但它更多的则是 pingback 规范的一个重要部分。除了这项检查之外,Pingback 的反垃圾信息措施与 TrackBack 的基本相同。
不管垃圾信息是来自机器人程序还是机械式的土耳其攻击,它均具有一个根本的弱点。垃圾信息散布者的主要目的就是提高其客户站点在搜索引擎的排名,这个过程被称为 “黑帽式搜索引擎优化(SEO)” 或 “垃圾索引”。除非垃圾信息散布者确实将链接带入,否则整个过程的意义不大,这意味着社区能够借助统计信息以及被报告的链接和链接模式共享垃圾信息客户链接的情报。与之稍有例外的情况是垃圾信息散布者确实在试图直接向该站点的访问者做广告以及对他人财产进行纯粹的蓄意破坏。这也是为何要通过多种手段和策略对付垃圾信息的原因之一。
内容分析的基本思想有别于社区方式。它涉及到内容的自动检查,通过对文本的统计分析来判断它与任何之前已经被标记为垃圾信息的内容是否接近。最常见的统计方式称为贝叶斯推理,更详细的内容,可以参阅 IBM developerWorks 的另一篇文章(参见 参考资料)。一旦有人将所帖出的内容标记为是垃圾信息或是好的内容(有时又称为 “ham”),统计表就会被更新。贝叶斯推理在对付电子邮件中的垃圾信息以及其他与垃圾信息不相关的领域(比如客户亲和力引擎,或商业推荐引擎)均有突出的表现。
如能跨多个目标站点执行内容分析,那么它将更为有效。垃圾信息散布者通常都会处理大量这类网站并发出机器人程序来逐个进行垃圾信息侵犯。如果在某个站点上可以检测出垃圾帖子,它就能让其他站点也能辨别出该帖子,这类似于上面描述的垃圾信息 bot 登记电子邮件和 IP 地址的热门列表。在内容分析的情景下,有几个商业(以及半商业)服务可作为补充。
Akismet 是知名的协作内容分析系统之一,它是一种商业服务,由一家与 WordPress Weblog 平台相关的公司提供。用户向服务提交评论并会收到一个标志表明它是否已经被标志为垃圾信息。Akismet 是该问题复杂性的生动体现。它是一种封闭服务,这意味着用户和观察者均不能看到垃圾信息的检测过程。这样做的原因是为了让垃圾信息散布者也无法知悉以使其不能攻击系统,但不好的一面是别人无法帮助改进该服务。更糟糕的是,如果合法的评论也被标记为垃圾信息,不免让人无法充分信任该服务。Akismet 也曾经因为错把人(包括那些批评过该公司或其创始人的人)放入黑名单而受到过谴责。其他的类似服务还包括 Mollom、Defensio 和 Project Honeypot Spam Domains List(PHSDL)。
很多 Weblog 都允许一些人来发布评论,但像论坛这样的站点通常都需要在发帖前先进行注册。可以利用注册过程来阻挡垃圾信息散布者。机器人程序通常会跨目标站点重用注册要求的电子邮件地址。即使是能自动生成地址的机器人程序也会在所生成的地址的模式方面留下蛛丝马迹。帮助管理员捕获垃圾信息散布者注册的站点和服务包括 “Stop Forum Spam” 和 “phpBB Anti Spam Project”(参见 参考资料)。
在应对 Web 垃圾信息的这场伟大的战役中,较量的焦点波及可写内容空间的每个方面。到目前为止,本文所讨论的方法大都集中于垃圾信息散布者攻击的最明显的对象 — 目标站点。垃圾信息散布者的行为模式有很多,所以如今的一些反垃圾信息技术都在试图利用这些模式。
大多数 Web 垃圾信息散布者都会在其活动中使用开放的 HTTP 代理中继(正如很多电子邮件垃圾信息散布者使用开放的 SMTP 中继一样)。在这种方式下,他们就能掩盖其真正的 IP 地址并由此避开黑名单等的检测。有些黑名单实际上会针对所有开放的 HTTP 中继,其基于的原因是如果它们能找到这些中继,垃圾信息散布者也能够。另一种常被社区采用的方式是部署 “honeypot”。一个 honeypot 伪装成一个假的开放 HTTP 代理中继,但是当垃圾信息散布者使用它时,该活动就被记录下来并被用来更新黑名单。此外,honeypot 操作者还会努力辨别垃圾信息散布者不断变化的行为模式。
除了使用 HTTP 代理黑名单之外,还可以选择自动阻塞所有被代理的请求。HTTP 代理会更新某些报头,您可以检查这些报头。清单 1 是实现此目的的一种 Apache 配置方案(参见 参考资料)。
# Apache config recipe for blocking proxy servers # http://perishablepress.com/press/2008/04/20/how-to-block-proxy-servers-via-htaccess/ RewriteEngine on RewriteCond %{HTTP:VIA} !^$ [OR] RewriteCond %{HTTP:FORWARDED} !^$ [OR] RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR] RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR] RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR] RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR] RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR] RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$ RewriteRule ^(.*)$ - [F] |
如果此时,您的脑海里尽是与抵御 Web 垃圾信息相关的这些技巧、技术和方法,那么您就对问题的严重性和困难程度有了大致的概念。此问题应该是所有现代 Web 开发人员都应该重视的,因为真正的 Web 2.0 的理念就是要集中社会团体的力量来改进信息系统。而这总是能同时引起好人和坏人的注意力,而且您将能很快了解到坏人在这个方面的创意也很丰富,并且所借助的工具也很智能。无论何时,只要您想出一个很棒的新 Web 2.0 特性,您也很有可能为垃圾信息散布者打开了方便之门。本系列文章带您领略了垃圾信息以及反垃圾信息领域的错综复杂,您应该对 Web 上的社区所存在的问题以及同类社区如何能团结起来共同寻找问题的解决方案有了大致的概念。