1

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

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

4

7 回答 7

2

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

于 2013-03-19T19:31:28.133 回答
2

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

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

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

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

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

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

于 2013-03-19T19:57:07.790 回答
1

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

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

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

于 2013-03-19T19:36:56.613 回答
1

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

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

在此处阅读更多相关信息。

于 2013-03-19T19:43:26.860 回答
0

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

示例来自如何使用 php 阻止一些 http 用户代理

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

或者只是一般的卷曲:

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

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

于 2013-03-19T19:40:36.710 回答
0

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

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

于 2013-03-19T19:41:52.867 回答
0

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

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

于 2013-03-19T19:51:19.607 回答