【问题标题】:How to stop bots from posting and causing exceptions如何阻止机器人发布并导致异常
【发布时间】:2023-03-20 04:31:01
【问题描述】:

我有一个表格,任何人都可以填写关于某事的评论,但此表格不在登录区域内。

在越来越多的机器人尝试输入垃圾邮件后,我开始使用验证码。 现在的问题是某种机器人并没有放弃。我每天都会收到大量异常电子邮件,因为机器人尝试输入“危险”数据,而 .NET 不允许这样做,因为请求已经过验证。 验证码根本没有帮助,因为它甚至不需要填写来尝试发布会导致异常的帖子。机器人似乎不明白它每次都失败。

昨天我尝试更改文本框的名称,还添加了一个“蜜罐”。但这与验证码的问题相同,异常发生在实际将任何内容发布到后面的代码之前。

我是否真的必须设置 ValidateRequest="false" 以使机器人更进一步并可能停止发出请求?

非常感谢所有想法。

【问题讨论】:

    标签: .net exception spam bots


    【解决方案1】:

    也许这个机器人很愚蠢。而不是让那个表单框在 html 中使用 javascript 对其进行加密。这可能会使机器人充分混淆。

    【讨论】:

      【解决方案2】:

      您可以:

      • 在页面设置ValidateRequest="false",开启XSS的可能。
      • 重写Page_Error(),然后捕获异常并以自己的方式处理。

      我认为您可能必须将两者结合起来才能使其正常工作。

      protected void Page_Error(object sender, EventArgs e)
      {
        Exception oops = Server.GetLastError();
      
        if(oops.GetBaseException() is System.Web.HttpRequestValidationException) 
        {
          System.Diagnostics.Debug.Assert(false);
        }
      }
      

      【讨论】:

      • 但这真的会阻止机器人吗?你的意思是如果我捕捉到异常并且不对其进行任何处理,机器人可能会认为它已成功发布,或者它最终知道它失败了?
      • 如果问题是您不希望具有无效表单数据的异常到达事件日志,那么您将不得不捕获这些异常——不管用户(机器人)看到什么。
      • 但是他们会继续尝试发布数据,用尽带宽。也许这是最好的解决方案,但它应该是更好的方法。顺便说一句,我不能通过 IP 地址拒绝,因为它们是完全随机的。
      • @Andreas 从根本上说,您无法阻止机器人向您的任何 URL 发送 HTTP POST。使用 javascript 可能会涉及诡计,在客户端脚本设置提交 url 之前,提交可能无法继续(希望机器人不会运行您的 javascript)。但从根本上讲,您无法停止包含POST /SubmitReview.aspx HTTP/1.1 ... 的 TCP 数据包
      • True.. 我实际上尝试禁用该按钮并使用 javascript 启用它,但机器人不需要该按钮 :) 我现在将解决此解决方案。谢谢伊恩和多米尼克。
      猜你喜欢
      • 2021-04-14
      • 2014-07-27
      • 1970-01-01
      • 2013-05-08
      • 2020-02-09
      • 1970-01-01
      • 2011-05-01
      • 2017-12-05
      相关资源
      最近更新 更多