外部测试机器人 (VB)
自动机器人使用垃圾邮件贴上 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
是在服务器端执行的,因此需要检查这些验证的结果。 这可以通过调用 NoBot
的 IsValid()
方法来完成。 它有一个参数 (作为 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
的测试。
此错误消息可能是由机器人 (单击以查看全尺寸图像)