【问题标题】:How to Stop a CURL form spammer? [closed]如何阻止 CURL 表单垃圾邮件发送者? [关闭]
【发布时间】:2013-03-08 16:00:26
【问题描述】:

我们将 phpforms.net 用于我们的 php 网页之一。我们不断收到 bs 表单提交的垃圾邮件。

他们显然在使用比机器人更复杂的东西来自动填写表格,因为他们能够绕过 maxlength html 要求和页面上的所有 javasript。这个Auto fill and submit forms on external site 展示了一种使用 CURL 重新发送 POST 的方法,所以我想知道这是否是我所面临的,我该如何阻止它?

【问题讨论】:

  • 你试过验证码吗?
  • 遗憾的是,这是验证码和重新验证码存在的原因之一。另一种方法是 AKISMET 样式系统,它会查看表单提交本身并尝试确定它们是否是垃圾邮件。
  • 实际上,用机器人构造一个 POST 请求是很简单的事情。拥有浏览器和自动填写表单会复杂得多...

标签: php curl


【解决方案1】:

reCaptha 会救你! :^) 它看起来很棒,而且它的代码很容易实现。

【讨论】:

  • 所以 reCaptch 可以阻止 CURL 垃圾邮件不是基于 javascript 的吗?
  • 您应该阅读有关CAPTCHA 测试的信息。简而言之,它的想法是在通过验证码测试之前不会接受任何请求。这个请求的提出方式没有区别——通过表单提交、通过 CURL 或来自火星的直接思想信息:没有腿 - 没有糖果。
【解决方案2】:

我最近创建了一个类来防止垃圾邮件而不使用 Captha。 它做了 3 件事。

Honey pots:字段为display:none。垃圾邮件机器人可以看到并填充它,但您的合法用户不会。如果它有任何值,那么表单是无效的。

Spinner:在呈现表单之前创建并存储在会话中的随机字符串,然后发布到type="hidden" 输入中。如果提交后字符串不同,则表单无效。

随机字段名称:为每个字段名称(在每个表单请求上)存储在会话中的随机字符串

在表单上实现此功能后,它从每天 100 多封垃圾邮件变为无。

我记得看过一篇关于这些的文章,我会尝试寻找它。

【讨论】:

  • 基于会话的“微调器”和“随机字段名称”看起来不太好。如果用户在新标签页中错误地打开了相同的链接,然后又将其关闭,则该表单将无效。
  • 小心蜜罐,一些浏览器会自动填充字段。使用唯一的字段名称,并且不要将其放在任何 type="password" 字段之上,否则它可能会被保存的用户名填充。
【解决方案3】:

根据PHPForms Features,他们提供 reCATPCHA。这实际上就是发明验证码的原因 - 因为垃圾邮件机器人滥用 html 表单。

验证码的方法是试图让机器人难以在没有人工干预的情况下提交表单。另一种方法是提交后启发式过程,例如Akismet,它试图通过查看提交的文本本身来确定垃圾邮件。

所以基本上你要么通过坚持验证码的有效性使提交表单变得稍微困难​​一些,要么只处理垃圾邮件。

【讨论】:

    【解决方案4】:

    这可能/可能无法帮助您,但我最近自己遇到了垃圾邮件问题。我尝试了这个解决方案,它完全解决了垃圾邮件问题。 此方法无需使用验证码:

    在您的表单中,创建一个新的输入字段并在您的 CSS 中使用 display: none 隐藏它。该字段是垃圾邮件陷阱。真实用户看不到此字段,但垃圾邮件机器人可以。因此,在后端,如果来自此隐藏字段的$_POST 数据包含任何内容,则提交是垃圾邮件,您可以这样处理。

    阅读更多关于它的信息here

    【讨论】:

      【解决方案5】:

      如果您只是在处理一个特定的机器人,您可能会阻止该用户代理。

      来自How to block some of http user agent using php的示例

      $badAgents = array('fooAgent','blahAgent', 'etcAgent');
      if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
          exit();
      }
      

      或者只是一般的卷曲:

      if (strpos($_SERVER['HTTP_USER_AGENT'], 'curl') !== false)
          exit;
      

      在许多情况下,它们并不是真正的攻击,而是作者没有意识到他们的代码卡在您的网站上。如果它确实是某种恶意活动,那么是的,你需要一个验证码。

      【讨论】:

      • 你可以轻松伪造HTTP_USER_AGENT
      • @Baba 是的。因此,为什么如果它是恶意的,这将不起作用。然而,在实践中,机器人背后并没有活跃的人类思维,因此可以通过像这样更简单的方法轻松阻止。
      【解决方案6】:

      使用服务器端代码时的验证应在服务器端处理。如果有问题的客户端不与 JavaScript 交互,JavaScript 将什么也不做。

      验证服务器端,即使您使用验证码,您也应该始终验证服务器上的信息。 使用验证码系统或文本分析系统,或同时使用两者,例如reCaptchamollomakismet

      【讨论】:

        【解决方案7】:

        我做了几件事。我实际上使用了 reCaptcha,然后有一个空白文本字段,我用 jQuery 隐藏了它,因为某些机器人实际上可以读取一些 CSS,并且如果 display: none 附加到它,则不会填写该字段。

        与往常一样,您也应该进行一些后端处理。除了验证我刚才说的 lameCaptcha 字段之外,如果您在前端有一个必填字段,请使用 trim() 并验证它是否确实有一个值。如果没有值,则不实际处理表单。

        【讨论】:

          猜你喜欢
          • 2012-09-11
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多