外部测试机器人 (C#)

作者 :Christian Wenz

下载 PDF

自动化机器人用垃圾邮件贴上 Weblog 和其他网站,提交评论表单而无需任何用户交互。 ASP.NET AJAX 控件工具包中的 NoBot 控件可帮助对抗这些机器人。

概述

自动化机器人用垃圾邮件贴上 Weblog 和其他网站,提交评论表单而无需任何用户交互。 ASP.NET AJAX 控件工具包中的 NoBot 控件可帮助对抗这些机器人。

步骤

击败机器人的一种常见方法是使用 CAPTCHAs 完全自动化公共图灵测试来区分计算机和人类。 图灵测试最初是一个测试,其中有人需要确定通信伙伴是人还是机器。 在 Web 中,CAPTCHA 通常由带有一些扭曲字母的图像组成。 其想法是,只有人类可以读取图像上的字母,而 OCR 算法将失败。

此方法有一些优点和缺点,但本教程未讨论此内容。 但是,ASP.NET AJAX 控件工具包中有一个控件,它提供类似的方法: NoBot。 它比 CAPTCHA 更容易克服,但在博客等网站上非常易于使用,并且价格非常出色,如果大多数垃圾邮件尝试被击败,则它被认为是成功的,而 NoBot 控件可以做到这一点。

NoBot 如果至少满足以下条件之一,则截获当前 ASP.NET Web 窗体的回发:

  • 浏览器无法解决 JavaScript 难题 (例如,当 JavaScript 被停用时)
  • 用户已快速提交表单
  • 客户端 IP 地址在某个时间段内提交表单的频率过高。

为了针对这些条件检查,NoBot控件需要这些属性 (所有可选) :

  • ResponseMinimumDelaySeconds 回发之间的最小秒数
  • CutoffWindowSeconds 度量来自一个 IP 的回发的时间间隔长度
  • CutoffMaximumInstances 每个时间间隔的最大秒数

以下标记要求在回发之间至少经过两秒钟,并且 30 秒间隔内只有 5 次回发或更少:

<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
 CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />

然后,像往常一样,请确保在页面中包括 ScriptManager ,以便加载 ASP.NET AJAX 库并使用 Control Toolkit:

<asp:ScriptManager ID="asm" runat="server" />

由于大多数检查NoBot是在服务器端执行的,因此需要检查这些验证的结果。 这可以通过调用 NoBotIsValid() 方法完成。 它有一个参数 (作为 out 参数/ByRef 参数) ,类型 NoBotState为 。 其字符串表示形式包含检查失败的原因,Valid否则为 。 以下代码根据 NoBot的结果输出消息:

<script runat="server">
 void Page_Load()
 {
 if (Page.IsPostBack)
 {
 NoBotState state;
 if (!nb.IsValid(out state))
 {
 Label1.Text = "Data refused (" 
 + HttpUtility.HtmlEncode(state.ToString()) + ")";
 }
 else
 {
 Label1.Text = "Data entered.";
 }
 }
 }
</script>

最后,需要一个要提交的表单和一个 label 元素来输出消息,你完成!

Your comment:
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/><br />
<input type="submit" id="Submit1" runat="server" value="Submit Form" /><br />
<asp:Label ID="Label1" runat="server" />

运行此脚本并在前两秒内停用 JavaScript 或提交表单或在三十秒内提交表单七次时,将收到错误消息。 但是,请明智地使用此控件,因为只有大约 90-95% 的用户激活了 JavaScript,因此 5-10% 的用户不会通过 NoBot测试。

此错误消息可能是由机器人引起的

此错误消息可能是由机器人 (单击以查看全尺寸图像)