使用PHP的Web表单即使使用CAPTCHA也会发送垃圾邮件

时间:2014-12-17 12:51:19

标签: php html forms

我的网站上有一个表单已经开始发送大量垃圾邮件,即使其上的验证码有效。

我注意到垃圾邮件发送者(即使我们的表单没有发布到博客上,也试图将链接放到便宜的培训鞋上)在填写表单时反复使用验证码文本。

我想要一种方法来检查三个表单字段的输入和输入是否相同,并在此时拒绝邮件。它已经到了我们缺少真正的询问的地步。

我尝试检查空白隐藏字段检测垃圾邮件的方式,这不起作用

我使用一个名为CaptchaSecurityImages.php的公共域图像生成器的标准脚本,到目前为止这是一个很好的例子,这是垃圾邮件的一个例子

Submit: Submit    
Name: T Shirt Women Summer    
Email: *******@gmail.com   
Address Line 1: ksjj22   
Address Line 2: ksjj22   
Town: ksjj22    
City: ksjj22    
Postcode: ksjj22    
Telephone: ksjj22    
Make: ksjj22    
Model: ksjj22   
Registration: ksjj22
Collection Date: ksjj22
Security code: ksjj22
Other information: Great post but I was wanting to know if you could write a litte more on this topic? I'd be very grateful if you could elaborate a little bit further. Cheers!
<a href="spam web address" >T Shirt Women Summer</a> [url=spam web address]T Shirt Women Summer[/url]
感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

  

我使用名为CaptchaSecurityImages.php

的公共域图像生成器使用标准脚本

你的图灵测试越广泛,机器人明确瞄准它的可能性就越大,并且能够打破它。图像识别脚本非常先进,并且一直在变得越来越先进。 2014年,为计算机制作难以读取的图像非常困难。

我在几个小型网站上所做的是:

Please enter the number 42 here to prove you're a human: [   ]
到目前为止,这种方法效果出奇的好。在代码中,您需要做的就是检查数字是否匹配,因此它非常容易实现,并且适用于所有客户(包括那些可能是盲人或有其他可访问性需求的客户),这并不总是基于图像的图灵测试案例(“CAPTCHA”是我认为的嘻哈字)。

这是有效的,因为解析一行文本,弄清楚其含义并给出正确的答案,对于计算机来说仍然是一个难题(虽然这可能会在将来发生变化),所以即使是一个非常简单的问题,例如就足够了。

你也可以对此进行扩展,并提出简单的问题,例如“今年是什么时候”,或“多少是六乘七”。您希望确保您的目标受众能够真正了解答案。

当然,您可以随机地在所有这些之间进行交替。到目前为止,我没有必要这样做,我建议首先问一下简单的问题。

请注意,这仅适用于相对小型网站。一旦您的网站或产品达到一定的规模,就会有足够的兴趣明确定位;在这一点上,一个人坐下来,写一个机器人来回答你写下的所有问题 但是,根据您的描述,我认为您的网站“足够小”。

答案 1 :(得分:3)

您可能还想实施HoneyPot。蜜罐主要的想法是拥有一个隐藏的空输入表单。垃圾邮件机器人会为每个输入字段填写一些值,即使它被css隐藏了。然后,您可以在php提交表单中调用isempty()。如果不是,那么你有垃圾邮件。这是capta的无忧替代品。

无论如何,如果他们专门为您的网站设置机器人,这并不能阻止攻击者发送垃圾邮件。如果你仍然受到攻击。获取发送信息的IP地址,如果发布的次数超过5次则阻止它们。如果您拥有重复违规者的IP地址,则可以阻止该IP地址访问该网站。

答案 2 :(得分:0)

我最终使用以下代码来检测垃圾邮件提交。对于我们一直有的问题,似乎有一两个实际的人在我们网站上的表单中输入信息,下面标识了在电话字段中使用验证码(它被用于大多数字段)并转储脚本防止我们的收件箱充满垃圾邮件(希望垃圾邮件发送者不知道是这种情况)

$Telephone = $_POST['Telephone'];
$Security_code = $_POST['security_code'];

if ($Telephone == $Security_code) 

   header("Location: /");
else