如何停止CURL表单垃圾邮件发送者?
我们正在使用phpforms.net作为我们的一个php网页。我们正在通过bs表单提交不间断的垃圾邮件。如何停止CURL表单垃圾邮件发送者?
他们显然使用一些更复杂的再一个机器人只是自动填写表格,因为他们能够绕过最大长度HTML要求,页面上的所有javasript。这个Auto fill and submit forms on external site 显示了一种使用CURL重新发送POST的方法,所以我想知道如果这是我反对,我该如何阻止它?
根据PHPForms Features他们提供reCATPCHA。这实际上是为什么captcha被发明的原因 - 因为垃圾邮件机器人滥用html表单。
Captcha验证码的方法是尝试很难让一个机器人提交表单,无需人工干预。另一种方法是提交启发式流程,如Akismet,它试图通过查看提交的文本本身来确定垃圾邮件。
所以基本上你要么让它稍硬通过坚持验证码有效性提交表单,或者你只是对付垃圾邮件。
如果你只是处理一个特定的机器人,你可能会阻止该用户代理。
来自实例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 2013-03-19 19:56:26
@Baba是的。因此,如果它是恶意的,这是行不通的。然而,实际上机器人在他们身后并没有一个活跃的人类思维,所以可以用这样简单的方法轻松停止。 – 2013-03-19 20:19:54
这可能不会帮助你,但我最近碰到了一个垃圾邮件问题。我试过这个解决方案,它已经完全解决了垃圾邮件问题。 没有必要使用验证码:
在您的表单中,创建一个新的输入字段,并在您的CSS中使用display: none
隐藏它。该字段是垃圾邮件陷阱。真正的用户看不到这个字段,但垃圾邮件机器人可以。因此,在后端,如果来自此隐藏字段的$_POST
数据包含任何内容,则提交的内容为垃圾邮件,您可以按照这种方式处理。
了解更多关于它here。
我做了几件事。我实际上使用reCaptcha,然后有一个空白的文本字段,我用jQuery隐藏,因为一些机器人实际上可以读取一些CSS,并且如果display:none被附加到它,将不会填充字段。
一如既往,你也应该做一些后端处理。除了验证我刚刚说的lameCaptcha字段外,如果前端有必填字段,则使用trim()并验证它实际上是否有值。如果没有价值,那就不要实际处理表单。
我最近创建了一个类,以防止使用Captha的垃圾邮件。 它有3件事。
蜜罐:字段为display:none
。垃圾邮件机器人可以看到它并将填充它,但您的合法用户不会。如果它有任何价值,那么表格是无效的。
微调框:在呈现表单之前创建并存储在会话中的随机字符串,然后发布在type="hidden"
输入中。如果提交后字符串不同,则表单无效。
随机字段名称:存储在每个字段名称的会话(每个表单请求)随机字符串
在窗体上实现此之后,从每天100多个垃圾邮件无人去了。
我记得在阅读这些文章时,我会试着去寻找它。
您是否试过captcha? – 2013-03-19 19:28:32
不幸的是,这是captcha和recaptcha存在的原因之一。另一种选择是一种AKISMET风格的系统,它自己查看表单提交并试图确定它们是否是垃圾邮件。 – BrianHall 2013-03-19 19:30:37
实际上,使用bot构建POST请求是一件简单的事情。有一个浏览器和自动填写表格会更复杂... – mensi 2013-03-19 19:30:51