真正的 Web 2.0: 会战 Web 垃圾信息,第 1 部分

通过评估访问者行为和控制工作流来减少垃圾信息

Web 上的垃圾信息已经成为了现代 Web 开发人员最大的威胁。在如何搞破坏以及如何在所有能获得的 Web 2.0 页面上传播广告方面,这些 “坏家伙” 也变得越来越复杂。更麻烦的是,垃圾信息还常被用来散布恶意软件。与垃圾信息的较量已经开始,Web 开发人员必须及时掌握一些可用的基础工具来对付 Web 站点上的垃圾信息。本系列文章由两部分组成,提供了有关反垃圾信息技术的详细指南。本文是其中的第一篇文章,介绍了如何评测一个访问者是否是垃圾信息散布者以及如何组织站点工作流来阻止垃圾信息。

Uche Ogbuji, 合伙人, Zepheira, LLC

Uche OgbujiUche Ogbuji 是 Zepheira, LLC 的合伙人,这家公司专门提供下一代 Web 技术解决方案。Ogbuji 先生是 4Suite 的首席开发人员,这是一种用于 XML、RDF 和知识管理应用程序的开放源代码平台;也是 Versa RDF 查询语言的首席开发人员。他是一位出生在尼日利亚的计算机工程师和技术作家,目前定居在科罗拉多的博尔德。



2009 年 1 月 19 日

在 1994 年,National Science Foundation 解除了对在 Internet 上进行商业宣讲的禁令。在当时,电子邮件和 Usenet 是主要的交流平台,而诸如 Gopher 这样简单的发布系统则试图建立更广泛的用户群。Web 尚未出现。那年,一个名为 Canter & Siegel 的律师事务所在 Usenet 上发布了第一个面向大众的商业广告垃圾信息,它雇了一名 Perl 程序员来为其 “绿卡彩票” 服务生成广告,这些广告随后被爆炸式地扩散到了 6,000 多个新闻组。他们成了名,但同时也招来非议。他们随即开始为他人提供类似的垃圾信息,宣扬垃圾信息的好处并撰写了 “互联网市场营销” 方面的书。从那之后,几乎没有一个在线论坛幸免于不受欢迎的商业广告。随着 Web 逐渐成为人们进行在线谈论的重要途径,在 Web 2.0 技术为人们能在 Web 畅所欲言逐渐敞开方便之门的时候,垃圾信息问题也复仇般地滋长起来了。

有些时候,Web 垃圾信息的害处无关痛痒,但更多时候,它都是十分有害的。垃圾信息散布者通常都不会满足于只发布一两个消息,而是会向论坛狂发消息,直至垃圾消息淹没了本来的主题。有时,垃圾信息包含色情或反社会的消息,会带来更大的负面影响。大多数搜索引擎都会将带有这类消息或提供与这类垃圾信息相关的站点链接的页面减值,这就意味着垃圾信息能减少搜索引擎的优化处理。最终的后果往往是 Web 发布者往往要在反垃圾信息方面浪费大量资源,并会占用处理其他任务的时间。

Web 垃圾信息有多种格式,包括:

  • wikis 上的垃圾文章和破坏性文章
  • Weblog 上评论性质的垃圾信息
  • 论坛、问题跟踪器和其他讨论论坛内的垃圾帖子
  • 引荐垃圾信息(垃圾信息站点假装将用户引荐到列有引用信息的目标站点)
  • 社会网络上的虚假用户条目

处理 Web 垃圾信息非常困难,但是 Web 开发人员如果忽视垃圾信息的预防,结果受伤害的还是开发人员自己。在本文以及后续的第 2 部分,我将展示对付各种 Web 垃圾信息的技巧、技术和服务。

垃圾信息散发者的行为

人们进行的正常网络行为在时间和内容方面常常具有不规则性。而垃圾信息通常都是由程序创建的,比如 Canter & Siegel 就是利用 Perl 脚本向 6,000 多个 Usenet 组发帖的。因此,有时候,可以使用这些程序的机制来对付垃圾信息散布者。比方说,在需要注册的情况下,可以使用各种警告标志来标记一个帐户以进行进一步的检查。比如,如果该帐户来自顶层的域,比如 .ru、.br、.biz,那么它就与垃圾信息散布者联系很紧密。如果一个帐户被标记了,可能就需要将该帐户发的一些帖子暂时延后,待检查了所发的内容之后再放行。

防洪控制

Wiki、Weblog 和论坛垃圾信息散布者通常都会在几秒内发送数十个请求,据此,可以限制某个用户或 IP 地址在某个时间间隔内所能发送的请求数。这种技巧也被称为防洪控制。同时,还要确保以这种方式进行的请求控制是跨整个站点,而不是单单一个页面的。

这些行为评估技巧还可以应用于本文下一节中来防止 Web 上除垃圾信息之外的其他滥用。比如,假设您托管了一个 Webmail 服务,垃圾信息散布者可能会试图大量创建帐户,然后利用这些帐户发送垃圾信息,再比如,假如您托管了一个在线竞拍站点,有人可能就会编写程序来操纵整个竞拍过程。总之,只要有注册新用户的系统存在,有些用户就会试图通过自动注册达到别有用心的目的。总的来说,这些技术可帮助 Web 开发人员确保使用其服务者均是正当用户。

工作流控制

很多垃圾信息都来自机器人程序,在使用站点方面,它们往往具有某些独特的特点,因此您可以利用这些特点。图 1 总结了在提交消息或评论以便将其添加到站点时典型的人、机工作流。

图 1. 典型的人、机工作流
典型的人、机工作流

机器人工作流一般径直进入 POST 请求,因此通过检测典型的机器人工作流可以禁止大量的垃圾信息。

表单变换

您可能要问了,主表单是否由请求者加载。一种检查方式是以可视或非可视(对用户而言)的方式变换表单的某些方面。通常非可视的方式是变换表单字段的名称。比如,您可能会通过字段名 content_081010_68_45_76_45(使用了日期、用户 IP 以及其他基于基本名称的类似修改)向一个用户发送具有主要内容的文本区域。最好不要允许一个变换字段名被重用。也可以进行可视变换,比如在其他模式表明所使用的这个 IP 是可疑的时候,要求某些用户在发布消息时选择一个复选框。

nonce 测试

一个 nonce 就是针对包含表单的某个页面视图而生成的一个难以猜出的值。之后,再在表单提交中要求该 nonce 作为其中的一个字段。如果机器人程序径直去 POSTing 这个表单提交,它将不会完成此 HTML 页面的加载,因此也就不会知道此 nonce 所预期的值。有很多方式可以对 nonce 测试进行细节调优。无论在何种情况下,都要确保 nonce 不能被重用,否则垃圾信息散布者就会很容易破解它。最好是使用 IP 地址和页面请求发生时的日期或完整时间以便生成和验证此 nonce。

检测 JavaScript

有些机器人程序会试图通过加载页面并阅读 nonce 来破解 nonce 测试。有了所需信息后,粗心的垃圾信息散布者常常会让机器人程序立即就发送 POST。因此,可以标记那些在表单加载后立即发生的提交,这可以通过使用这样一个时间间隔实现,在这个时间间隔内普通人是根本无法如此快速地完成表单输入的。这与防洪控制测试也是相关的。即便机器人程序再小心,它们通常都不会在表单页面上运行任何 JavaScript。您可以以多种方式利用这一点。首先,最好不要在此表单页面的实际内容内生成这个 nonce,而是可以通过来自表单页面的一个次要的 JavaScript 请求来生成。可以设置用户首次向主要的内容字段输入数据时的事件处理程序,如图 2 所示。

图 2. 使用 JavaScript 改进 nonce 测试
使用 JavaScript 改进 nonce 测试

这里的主要问题是有些用户可能会禁用 JavaScript,并且实际上有些公司规定也是这么要求的,所以应该为用户提供备用的途径来进行身份验证,比如只对不调用 JavaScript 的用户使用表单验证。但是某些垃圾信息散布者会使用浏览器引擎内的脚本启动攻击,所以他们的确会调用 JavaScript。因此,可以使用 JavaScript 测试作为检测垃圾信息的一种衡量因素,而不是绝对的判断依据。


测试 H.Q.(human quotient)

对付 Web 垃圾信息的一种很常用的方式是 nonce 测试的一种改良。做法是在 post 表单包含某种可视测试,这种测试对人而言很容易,对机器人程序而言则很复杂。最常见的一种方法是 CAPTCHA。在这种测试内,您给出的是一个代表某种数字符号的图像,用户必须读懂并在表单字段内输入这些符号。垃圾信息散布者常常会使用视觉字符识别来破解 CAPTCHA,所以通常我们需要严重歪曲这些图像。图 3 是 CAPTCHA 图像的一个例子。

图 3. CAPTCHA 图像要求用户回答 “smwm”
一个 CAPTCHA 图像

虽然在本例中图像有所歪曲,垃圾信息散布者仍然能破解 CAPTCHA,所以需要更高程度的歪曲,如图 4 所示。

图 4. CAPTCHA 图像要求用户回答 “following finding”
另一个 CAPTCHA 图像

这里的问题有几个。其一是,为了战胜垃圾信息散布者,CAPTCHA 需要很高程度的歪曲,这样一来,人也很难看懂。有些人,比如视觉障碍人士,根本就看不到 CAPTCHA 图像,所以这个技巧的适用性比较差,在某些情况下甚至是不合法的。如果忽略这些困难不谈,CAPTCHA 已经成为了时下最流行的垃圾信息防治工具之一。

文本确认

一种类似的、同时又不会影响访问性的技术是向用户提出一个随机的文本问题。如果站点针对的是一个特定的领域,所提的问题可能会需要回答者具有对该领域的一些基础知识。比如,在一个医疗信息和服务站点,您可能会提出这样的问题,“人体内与呼吸相关的主要器官是什么?”,预期的答案自然是“肺”。对于这种方式,至关重要的一点是提出的问题要多样,并且要格外注意措辞以便让人能回答出来,而机器人程序则基本猜不到。


结束语

您可以对本文中所谈论的这些技巧和技术进行改进,比如,您可以强迫用户预览他们要发的信息。通过添加这一额外的工作流阶段,可以捉获一些垃圾信息散布者,并且如果您足够用心,比如用 JavaScript 为一些用户自动化预览,那么即便是有些不方便之处也不会阻碍用户参与的积极性。应该根据工作流适当应用 CAPTCHA、表单变换、nonce 等,并且采用的手段应使大多数合法用户觉察不到,但却让垃圾信息散布者束手无策。

评估行为和管理工作流虽能减少垃圾信息,却不能消除它们。例如,一些垃圾信息散布者会雇一些人来专门破解本文中所讨论的这些技巧(有时又称其为 “机械土耳其人” 攻击)。他们常常在人力成本低的地方雇人,让这些人专门到目标站点手工留下垃圾信息。要解决机械土耳其人的问题和对付复杂的垃圾信息机器人程序,需要借助由与您一样憎恨垃圾信息的人所组成的社区的力量。我将在本系列下一期文章中介绍如何能做到这一点。

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development
ArticleID=365242
ArticleTitle=真正的 Web 2.0: 会战 Web 垃圾信息,第 1 部分
publish-date=01192009