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

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

测试 H.Q.(human quotient)

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


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

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


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

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

文本确认

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

 

 

 

结束语

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

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值