共用方式為


對抗機器人 (C#)

作者:Christian Wenz

下載 PDF

自動化機器人會在部落格和其他網站上大量散佈垃圾訊息,不需任何使用者互動即可提交註解表單。 ASP.NET AJAX Control Toolkit 中的 NoBot 控制項可協助對抗這些機器人。

概觀

自動化機器人會在部落格和其他網站上大量散佈垃圾訊息,不需任何使用者互動即可提交註解表單。 ASP.NET AJAX Control Toolkit 中的 NoBot 控制項可協助對抗這些機器人。

步驟

防止機器人攻擊的一種常見方法是使用 CAPTCHA 全自動區分電腦和人類的公開圖靈測試。 圖靈測試最早是用來判斷溝通的夥伴到底是人還是機器的一種測試。 在網路上,CAPTCHA 通常由一個影像組成,上面有一些扭曲的字母。 其概念是,只有人類才能讀取影像上的字母,而 OCR 演算法將會失敗。

此方法有數個優點和缺點,但此討論已超出本教學課程的範圍。 不過,ASP.NET AJAX Control Toolkit 中有一個控制項,提供類似的方法:NoBot。 它比 CAPTCHA 容易破解,但非常容易使用,而且在部落格這樣的網站上效果非常好,因為只要能攔截住大部分的垃圾訊息就算成功,而 NoBot 控制項就能做到這一點。

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

  • 瀏覽器無法解決 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">
 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>

最後,您需要一個表單來提交和標籤項目來輸出訊息,就完成了!

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的測試會失敗。

這個錯誤訊息可能是由機器人所造成

這個錯誤訊息可能是由機器人所造成 (按一下以檢視完整大小的影像)