2011-03-21 31 views
5

我有一個表單,任何人都可以填寫有關某些內容的評論,而且此表單不在登錄區域內。如何阻止漫遊器發佈和引起異常

越來越多的機器人試圖輸入垃圾郵件後,我開始使用captcha。 現在的問題是某種機器人並不會放棄。由於機器人試圖輸入「危險的」數據,因此我每天都會收到大量的異常電子郵件,而.NET不允許這樣做,因爲請求已經過驗證。 驗證碼根本沒有幫助,因爲它甚至不需要填寫以嘗試發佈會導致異常的帖子。機器人似乎並不瞭解每次都會失敗。

昨天我試着改變了文本框的名字,我還加了一個「蜜罐」。但是與captcha相同的問題,在將任何內容實際發佈到代碼之後發生異常。

我是否真的必須設置ValidateRequest =「false」才能使機器人更進一步,並可能停止提出請求?

所有的想法都非常讚賞。

回答

1

您可以:

  • 設置ValidateRequest =頁面上的 「假」,開放XSS的可能性。
  • 重寫Page_Error(),然後捕獲異常並以您自己的方式處理它。

我想你可能必須結合2才能得到這個工作。

protected void Page_Error(object sender, EventArgs e) 
{ 
    Exception oops = Server.GetLastError(); 

    if(oops.GetBaseException() is System.Web.HttpRequestValidationException) 
    { 
    System.Diagnostics.Debug.Assert(false); 
    } 
} 
+0

但是這真的會阻止機器人嗎?你的意思是,如果我發現了這個例外,並且沒有做任何事情,機器人可能會認爲它已成功發佈,或者它最終明白它失敗了? – Andreas 2011-03-21 12:04:29

+0

如果問題是您不希望有無效表單數據的異常到達事件日誌,那麼您將不得不捕獲這些異常 - 從不知道用戶(機器人)看到的內容。 – 2011-03-21 13:21:25

+0

但他們會不斷嘗試發佈數據,使用帶寬。也許這是最好的解決方案,但它應該是一個更好的方法。順便說一句,我不能否認IP地址,因爲他們是完全隨機的。 – Andreas 2011-03-21 13:41:21

0

也許這個bot很愚蠢。而不是在html中使用javascript對其進行加密。這可能會使機器人充分混淆。