如何阻止CURL表单垃圾邮件发送者


How to Stop a CURL form spammer?

我们正在使用phpforms.net作为我们的一个php网页。而且我们不断收到垃圾邮件。

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

reCaptha将拯救您!: ^)它看起来很棒,代码也很容易实现。

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

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

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

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

在表单上实现此功能后,它从每天100多个垃圾邮件减少到没有。

我记得看过一篇关于这些的文章,我会试着找找看

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

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

所以基本上你要么通过坚持验证码的有效性来稍微增加提交表单的难度,要么直接处理垃圾邮件

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

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

如果您只处理一个特定的bot,您可能会阻止该用户代理。

示例来自如何使用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;

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

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

验证服务器端,即使你使用验证码,你也应该始终在服务器上验证信息。使用验证码系统或文本分析系统,或两者兼而有之,例如reCaptcha或mollom或akismet。

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

与往常一样,您还应该执行一些后端处理。除了验证我刚才说的lameCaptcha字段之外,如果您在前端有一个必需的字段,请使用trim()并验证它实际上有一个值。如果没有值,就不要处理这个表单