我们正在使用phpforms.net作为我们的一个php网页。我们正在通过bs表单提交不间断的垃圾邮件。
他们显然正在使用比机器人更复杂的东西来自动填写表单,因为他们能够绕过页面上的maxlength html要求和所有javasript。这Auto fill and submit forms on external site 显示了一种使用CURL重新发送POST的方法,所以我想知道这是否是我反对的,我该如何阻止它?
答案 0 :(得分:3)
我最近创建了一个不使用Captha来防止垃圾邮件的课程。 它做了三件事。
蜜罐:display:none
字段。垃圾邮件机器人可以看到并填充它,但你的合法用户不会。如果它有任何价值,则表格无效。
Spinner:在呈现表单之前创建并存储在会话中的随机字符串,然后发布在type="hidden"
输入中。如果提交后字符串不同,则表单无效。
随机字段名称:每个字段名称(在每个表单请求中)存储在会话中的随机字符串
在表单上执行此操作后,它从每天100多个垃圾邮件变为无。
我记得在阅读有关这些的文章时,我会尝试寻找它。
答案 1 :(得分:2)
reCaptha会救你! :^) 它看起来很棒,而且它的代码很容易实现。
答案 2 :(得分:1)
根据PHPForms Features他们提供reCATPCHA。这实际上是为什么验证验证码被发明的原因 - 因为垃圾邮件机器人滥用了html表单。
验证码的方法是尝试让机器人在没有人为干预的情况下提交表单变得困难。替代方案是提交后启发式流程,如Akismet,它会尝试通过查看提交的文本本身来确定垃圾邮件。
所以基本上你要么通过坚持验证码有效性来提交你的表格稍微困难,要么你只是处理垃圾邮件。
答案 3 :(得分:0)
如果您只是处理一个特定的机器人,您可能会阻止该用户代理。
来自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;
在许多情况下,他们并不是真正的攻击,因为作者没有意识到他们的代码卡在您的网站上。如果它确实是某种恶意活动,那么是的,你将需要一个验证码。
答案 4 :(得分:0)
使用服务器端代码时的验证应该在服务器端处理。如果相关客户端不与JavaScript交互,JavaScript将无效。
验证服务器端,即使您使用验证码,也应始终验证服务器上的信息。 使用验证码系统或文本分析系统,或两者兼而有之,例如reCaptcha或mollom或akismet。
答案 5 :(得分:0)
这可能/可能对您没有帮助,但我最近遇到了垃圾邮件问题。我尝试了这个解决方案,它完全解决了垃圾邮件问题。 此方法无需使用Captcha:
在表单中,创建一个新的输入字段,并在CSS中使用display: none
隐藏它。此字段是垃圾邮件陷阱。真实用户无法看到此字段,但垃圾邮件机器人。因此,在后端,如果此隐藏字段中的$_POST
数据包含任何内容,则提交是垃圾邮件,您可以按原样处理。
详细了解here。
答案 6 :(得分:0)
我做了几件事。我实际上使用reCaptcha,然后有一个空白的文本字段,我用jQuery隐藏,因为一些机器人实际上可以读取一些CSS,如果display:none附加到它,将不会填写该字段。
与往常一样,您也应该进行一些后端处理。除了验证我刚刚说过的lameCaptcha字段外,如果前端有一个必填字段,请使用trim()并验证它实际上是否有值。如果没有值,则不要实际处理表单。