-- 作者:supremeweb
-- 发布时间:2/11/2009 2:11:00 PM
-- 真正的 Web 2.0: 会战 Web 垃圾信息,第 2 部分
借助社区的力量对抗垃圾信息 级别: 中级 [URL=http://www.ibm.com/developerworks/cn/web/wa-realweb11/#author]Uche Ogbuji[/URL], 合伙人, Zepheira, LLC 2009 年 2 月 02 日 这个由两部分组成的系列文章提供了如何抵御垃圾信息的详细指导。本文是其中的第 2 部分,讨论了内容分析、回链(linkback)中存在的垃圾信息问题,以及如何通过黑名单和反垃圾信息服务与其他 Web 站点管理员共享抵御垃圾信息的经验和种种努力。 对付 Web 上的垃圾信息,科学的技术和技巧很重要。在本专栏 [URL=http://www.ibm.com/developerworks/cn/web/wa-realweb10/]前一期文章[/URL] 中,我介绍了如何使用工作流对付垃圾信息机器人程序,并且最好不会给正当使用的用户带来任何不便。在本篇文章中,我将讨论垃圾信息的其他方面的问题,比如内容网站间的关系以及垃圾信息受害者如何能够展开协作来对抗垃圾信息散布者。 社区警察 对付 Web 垃圾信息最有效的方式是通过社区行动。垃圾信息是一种大规模的攻击,所以迫切需要大规模的抵抗。如果社区能协助发现并揭露垃圾信息散布者的行为和内容模式,那么这些模式经过共享就能让机器人程序无法或不容易奏效。社区尤其适用于用前一期文章中介绍的方法仍无法对付的其他形式的垃圾信息。首先,我先花点时间介绍回链垃圾信息。 Linkback 垃圾信息 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 的另一篇文章(参见 [URL=http://www.ibm.com/developerworks/cn/web/wa-realweb11/#Resources]参考资料[/URL])。一旦有人将所帖出的内容标记为是垃圾信息或是好的内容(有时又称为 “ham”),统计表就会被更新。贝叶斯推理在对付电子邮件中的垃圾信息以及其他与垃圾信息不相关的领域(比如客户亲和力引擎,或商业推荐引擎)均有突出的表现。 进入社区 如能跨多个目标站点执行内容分析,那么它将更为有效。垃圾信息散布者通常都会处理大量这类网站并发出机器人程序来逐个进行垃圾信息侵犯。如果在某个站点上可以检测出垃圾帖子,它就能让其他站点也能辨别出该帖子,这类似于上面描述的垃圾信息 bot 登记电子邮件和 IP 地址的热门列表。在内容分析的情景下,有几个商业(以及半商业)服务可作为补充。 Akismet 是知名的协作内容分析系统之一,它是一种商业服务,由一家与 WordPress Weblog 平台相关的公司提供。用户向服务提交评论并会收到一个标志表明它是否已经被标志为垃圾信息。Akismet 是该问题复杂性的生动体现。它是一种封闭服务,这意味着用户和观察者均不能看到垃圾信息的检测过程。这样做的原因是为了让垃圾信息散布者也无法知悉以使其不能攻击系统,但不好的一面是别人无法帮助改进该服务。更糟糕的是,如果合法的评论也被标记为垃圾信息,不免让人无法充分信任该服务。Akismet 也曾经因为错把人(包括那些批评过该公司或其创始人的人)放入黑名单而受到过谴责。其他的类似服务还包括 Mollom、Defensio 和 Project Honeypot Spam Domains List(PHSDL)。 检查注册者和发送者的细节 很多 Weblog 都允许一些人来发布评论,但像论坛这样的站点通常都需要在发帖前先进行注册。可以利用注册过程来阻挡垃圾信息散布者。机器人程序通常会跨目标站点重用注册要求的电子邮件地址。即使是能自动生成地址的机器人程序也会在所生成的地址的模式方面留下蛛丝马迹。帮助管理员捕获垃圾信息散布者注册的站点和服务包括 “Stop Forum Spam” 和 “phpBB Anti Spam Project”(参见 [URL=http://www.ibm.com/developerworks/cn/web/wa-realweb11/#Resources]参考资料[/URL])。 靠近源头 在应对 Web 垃圾信息的这场伟大的战役中,较量的焦点波及可写内容空间的每个方面。到目前为止,本文所讨论的方法大都集中于垃圾信息散布者攻击的最明显的对象 — 目标站点。垃圾信息散布者的行为模式有很多,所以如今的一些反垃圾信息技术都在试图利用这些模式。 Honeypot 大多数 Web 垃圾信息散布者都会在其活动中使用开放的 HTTP 代理中继(正如很多电子邮件垃圾信息散布者使用开放的 SMTP 中继一样)。在这种方式下,他们就能掩盖其真正的 IP 地址并由此避开黑名单等的检测。有些黑名单实际上会针对所有开放的 HTTP 中继,其基于的原因是如果它们能找到这些中继,垃圾信息散布者也能够。另一种常被社区采用的方式是部署 “honeypot”。一个 honeypot 伪装成一个假的开放 HTTP 代理中继,但是当垃圾信息散布者使用它时,该活动就被记录下来并被用来更新黑名单。此外,honeypot 操作者还会努力辨别垃圾信息散布者不断变化的行为模式。 阻塞所有代理 除了使用 HTTP 代理黑名单之外,还可以选择自动阻塞所有被代理的请求。HTTP 代理会更新某些报头,您可以检查这些报头。清单 1 是实现此目的的一种 Apache 配置方案(参见 [URL=http://www.ibm.com/developerworks/cn/web/wa-realweb11/#Resources]参考资料[/URL])。 清单 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] 基于成本的垃圾信息防御的社区努力 如果从发送到发布没有任何成本的话,很难想象垃圾信息问题将会多么严重。拿我自己的书信邮件来说,其中有 40% 都是垃圾信息。而电子邮件更为严重,其中的 90% 或更多都是垃圾信息。减少电子垃圾(包括电子邮件和 Web 上的垃圾信息)的一种方式是给发送邮件或在 Web 站点发布信息的行为加上一些成本。这里的理念是让正当用户承担很少的管理费用,以此来遏制垃圾信息散布者,这样一来,他们就无法再为了发送出几千条消息或帖子而进行数百万次的攻击。有人已经就这种方式的货币成本进行过讨论,但是这种方式还是问题重重。对微小支付和信用的管理会很复杂,有可能还会代价昂贵。而且,货币价值在不同地区、不同社会阶层差异太大,因此,对西欧或北美的人看起来微不足道的一笔支出,对撒哈拉以南的非洲居民而言则是一笔不小的负担。 Internet 的初衷就是要成为打破数字差异的一种强大工具,所以如果要以牺牲这一初衷为代价,未免有些不幸。 基于成本的一种更实用的垃圾信息抵御方式是强迫发送电子邮件或发布信息的人为此支付数量可观的一些 CPU 周期。这样一来,不管他们是坐在拉各斯(尼日利亚首都)的一个网吧中,还是在旧金山自己的家里使用笔记本,都不会因发布一个正常的帖子而为他们造成支付负担,而这却能有效抵御垃圾信息散布者,因为他们再也不能试图通过向每个站点发送一百个帖子来攻击一千个网站了。这种方式又称为 “proof-of-work” 模式,而其中最常用的当数 “hashcash”。 Hashcash Hashcash 是基于成本的垃圾信息防御的一种巧妙方式。它需要用户在发布内容之前进行 SHA-1 哈希计算,比如通过在发布页面上的 JavaScript 内包括一个计算。这就确保了请求者必须补充一定数量的 CPU 周期才能发布,但目标站点的检查成本又很低。这基本上算是一种服务拒绝的对策。hashcash 的主要问题是很多垃圾信息散布者都会使用 “botnet”,或是被黑客攻击了的计算机,这些计算机已经被重新编程,会服从垃圾信息散布者的命令。这就意味着坏人并不太在乎 CPU 的使用,因为使用的并不是他们自己的 CPU。出于这个原因,hashcash 必须与其他的反垃圾信息技术联合使用。 结束语 如果此时,您的脑海里尽是与抵御 Web 垃圾信息相关的这些技巧、技术和方法,那么您就对问题的严重性和困难程度有了大致的概念。此问题应该是所有现代 Web 开发人员都应该重视的,因为真正的 Web 2.0 的理念就是要集中社会团体的力量来改进信息系统。而这总是能同时引起好人和坏人的注意力,而且您将能很快了解到坏人在这个方面的创意也很丰富,并且所借助的工具也很智能。无论何时,只要您想出一个很棒的新 Web 2.0 特性,您也很有可能为垃圾信息散布者打开了方便之门。本系列文章带您领略了垃圾信息以及反垃圾信息领域的错综复杂,您应该对 Web 上的社区所存在的问题以及同类社区如何能团结起来共同寻找问题的解决方案有了大致的概念。 参考资料 学习 您可以参阅本文在 developerWorks 全球网站上的 [URL=http://www.ibm.com/developerworks/web/library/wa-realweb11/]英文原文[/URL]。 阅读本系列的第一篇文章 “[URL=http://www.ibm.com/developerworks/cn/web/wa-realweb10/]会战 Web 垃圾信息,第 1 部分[/URL]”,作者:Uche Ogbuji。 [URL=http://en.wikipedia.org/wiki/Linkback]Linkbacks[/URL](Refback、Trackback 和 Pingback)是用来连接 Weblog、文章以及其他贴子与联锁讨论的机制,但同时也常被垃圾信息散布者不当利用。 [URL=http://en.wikipedia.org/wiki/Spamdexing]Spamdexing[/URL] 是一个术语,涵盖了垃圾信息散布者用来提高搜索引擎流行性的各种方式和技术,包括滥用其他站点。 查阅这个 [URL=http://perishablepress.com/press/2008/04/20/how-to-block-proxy-servers-via-htaccess/]阻塞 Apache 内的代理服务器的妙方[/URL]。 通过 Paul Meagher 的这篇标题为 “[URL=http://www.ibm.com/developerworks/web/library/wa-bayes1/]Implement Bayesian inference using PHP, Part 1[/URL]” 的文章(developerWorks,2004 年 3 月)了解有关最流行的垃圾信息数据统计分析方法的更多信息。 通过 David Mertz 的文章 “[URL=http://www.ibm.com/developerworks/cn/linux/l-hashcash.html]可爱的 Python:用 hashcash 打击垃圾信息[/URL]” 了解 hashcash 技术,该技术除了可以对付电子邮件系统中的垃圾信息之外,还可用来最少化 Wikis 上的垃圾信息。 通过 developerWorks [URL=http://www.ibm.com/developerworks/cn/web/]Web 开发专区[/URL] 内有关 Web 技术的文章和教程(包括本专栏之前的各期文章)扩展您的站点开发技能。 随时关注 [URL=http://www.ibm.com/developerworks/offers/techbriefings/?S_TACT=105AGX08&S_CMP=art]developerWorks 技术活动和网络广播[/URL]。 获得产品和技术 尝试使用一些论坛注册黑名单并禁止列表的服务和具体列表 [URL=http://sumbit.com/phpbb_spam.htm]phpBB Anti Spam Project[/URL] [URL=http://www.stopforumspam.com/]“Stop Forum Spam”[/URL] [URL=http://www.gearhack.com/Articles/FightSpam/]“Fight Comment Spam, Ban IP's ”[/URL](包含一个可下载的黑名单) 关于作者 Uche Ogbuji 是 [URL=http://zepheira.com/]Zepheira, LLC[/URL] 的合伙人,这家公司专门提供下一代 Web 技术解决方案。Ogbuji 先生是 [URL=http://4suite.org/]4Suite[/URL] 的首席开发人员,这是一种用于 XML、RDF 和知识管理应用程序的开放源代码平台;也是 Versa RDF 查询语言的首席开发人员。他是一位出生在尼日利亚的计算机工程师和技术作家,目前定居在科罗拉多的博尔德。
|