對抗 Bot (VB)

作者 :一個是一個

下載 PDF

自動化 Bot 會以垃圾郵件填滿 Weblog 和其他網站,不需任何使用者互動即可提交批註表單。 ASP.NET AJAX 控制項工具組中的 NoBot 控制項可協助對抗這些 Bot。

概觀

自動化 Bot 會以垃圾郵件填滿 Weblog 和其他網站,不需任何使用者互動即可提交批註表單。 ASP.NET AJAX 控制項工具組中的 NoBot 控制項可協助對抗這些 Bot。

步驟

失敗 Bot 的其中一個常見方法是使用 CAPTCHAs 完全自動化公用圖測來告訴電腦和人類。 圖靈測試原本是一項測試,其中有人需要決定通訊夥伴是人類還是電腦。 在 Web 中,CAPTCHA 通常會包含一些扭曲字母的影像。 其概念是只有人類可以讀取影像上的字母,而 OCR 演算法將會失敗。

此方法有數個優點和缺點,但此討論超出本教學課程的範圍。 不過,ASP.NET AJAX 控制項工具組中有一個控制項,提供類似的方法: NoBot 。 比 CAPTCHA 更容易克服,但非常容易使用,而且在部落格之類的網站上,如果大部分的垃圾郵件嘗試都遭破壞, NoBot 控制措施就會被視為成功。

NoBot 如果至少符合下列其中一個條件,則會攔截目前 ASP.NET Web 表單的回傳:

  • 當 JavaScript 停用時,瀏覽器無法解決 JavaScript 的難題 ()
  • 使用者已將表單提交至快速
  • 用戶端 IP 位址在特定時段內送出表單太頻繁。

為了檢查這些條件, NoBot 控制項需要這些屬性 (所有選擇性) :

  • ResponseMinimumDelaySeconds 回傳之間的秒數下限
  • CutoffWindowSeconds 從一個 IP 回傳的時間間隔長度為量值
  • CutoffMaximumInstances 每個時間間隔的最大秒數

下列標記要求在回傳之間至少經過兩秒,且在 30 秒間隔內只有五個回傳或更少:

<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,或在前兩秒內提交表單,或在 30 秒內提交表單七次時,您會收到錯誤訊息。 不過,請明智地使用此控制項,因為只有大約 90-95% 的使用者已啟用 JavaScript,因此 5-10% 的使用者將會失敗 NoBot 的測試。

這個錯誤訊息可能是由 Bot 所造成

這個錯誤訊息可能是 Bot (按一下即可檢視完整大小的映射)