對抗 Bot (VB)
作者 :一個是一個
自動化 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
是在伺服器端進行,因此您必須檢查這些驗證的結果。 這可以藉由呼叫 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,或在前兩秒內提交表單,或在 30 秒內提交表單七次時,您會收到錯誤訊息。 不過,請明智地使用此控制項,因為只有大約 90-95% 的使用者已啟用 JavaScript,因此 5-10% 的使用者將會失敗 NoBot
的測試。
這個錯誤訊息可能是 Bot (按一下即可檢視完整大小的映射)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應