外部测试机器人 (VB)

作者 :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">
 Sub Page_Load()
 If Page.IsPostBack Then
 Dim state As NoBotState
 If Not nb.IsValid(state) Then
 Label1.Text = "Data refused (" + HttpUtility.HtmlEncode(state.ToString()) + ")"
 Else
 Label1.Text = "Data entered."
 End If
 End If
 End Sub
</script>

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

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的测试。

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

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