有人能推荐一种当前有效的验证码解决方案吗?

3
我有一个带有简单表单响应的网站。几个月前,我开始每天收到来自俄罗斯的虚假提交,大约4或5个。我尝试了几种解决方案都没有效果:
  1. 我添加了reCaptcha,它有效了几天,然后垃圾邮件又开始了(快速的谷歌搜索表明reCaptcha在2010年被黑客攻击了!)。
  2. 接下来,我切换到了一个简单的javascript片段“两加三等于多少?”但几天后也被黑客攻击了。
  3. 然后我切换到了SecureImage(PHP图像验证码)。第二天,更多的垃圾邮件。
  4. 然后我在我的表单中添加了一个“标题”字段,并用CSS隐藏它。我的表单处理程序(一个php脚本)如果标题字段被填写(可能是机器人),则拒绝表单。还是被垃圾邮件攻击了。
  5. 今天,我修改了我的javascript,提出了不同的问题。一个小时内又被垃圾邮件攻击了。
日志显示每次提交都来自不同的IP地址。那些有whois条目的都来自俄罗斯。有什么建议可以解决这个问题吗?我不想实现电子邮件验证或其他可能会使用户感到烦恼的东西。

1
也许有人只是手动欺骗你? - tomsseisums
你确定垃圾邮件来自于你试图保护的那个特定表单吗? - Saebekassebil
@Tom 说得好。验证码的作用是防止机器人(并轻微地困扰人类)。如果垃圾邮件发送者是一个有决心和/或疯狂的人,他因某种原因针对这个网站,那么自动化解决方案是无济于事的。 - octern
它们看起来不太可能是由人类生成的。我该怎么判断?它们都来自不同的IP地址?日志表明它们来自表单页面。有没有办法判断它们是否是欺骗信息? - jshock
我是唯一一个认为这应该放在网站管理员上的人吗? - Madara's Ghost
4个回答

3
Captchas只是路上的减速带,而不是路障。它们永远不会是100%的解决方案。
甚至有带API的网络服务 已经有人类来解决验证码,仅需几分之一的美分。
我还见过一个有趣的实现方式,即垃圾邮件发送者运行一个“提交此验证码以查看色情图片库”的网站。他们向寻找裸体照片的人展示您的验证码,并将他们的响应传递给您的表单。

我同意,验证码很烦人。但是我必须想出一种方法来过滤这些提交。这些提交应该通过电子邮件发送到一个履行中心,我不希望履行人员将样品运送到俄罗斯。每个月一两个我可以承受。但是每天4或5个就太多了。 - jshock
最简单的解决方案可能是非技术性的。 “不要向俄罗斯运送任何东西,伙计们。” - ceejayoz

2
说实话,垃圾邮件越来越难以防止,没有一种百分之百有效的方法。最好的解决方案是两者兼顾。reCAPTCHA很好,但如果你将其与数学方程式结合使用,效果可能会更好。此外,您要记住不要使垃圾邮件拦截器过于复杂,因为它们可能能够有效地阻止垃圾邮件机器人,但也会阻挡真正的用户。
另外,如果您不希望有来自俄罗斯的客户,或者您知道您不会从那里得到任何真正的业务,那么为什么不直接屏蔽俄罗斯IP地址呢?

1
这可能是一个愚蠢的问题,但是你如何阻止所有俄罗斯IP? - jshock
1
显然有一些方法可以绕过它,比如他们可能正在使用代理,但是这个网站提供了一个很好的参考:链接 - Nick George
1
简单的谷歌搜索给出了这个网站:http://www.countryipblocks.net/ 还有很多其他的。我搜索了“俄罗斯IP地址范围”。 - Madara's Ghost
1
大多数Web服务器也提供通过标头按国家屏蔽的选项,因此这始终是一种选择,但也是最容易被绕过的选择。 - Nick George
1
你说了俄罗斯,但你有多确定他们真的来自俄罗斯?试着屏蔽任何非北美国家。 - Nick George
显示剩余4条评论

1

我不想吹嘘,因为如果我链接它,今晚它就会被黑掉,但是我制作了一个似乎运行得非常好的程序。本质上(我会让你自己解决细节问题),我有十几张简单的照片-猫、狗、汽车、飞机、鸟等,并在随机命名的表单字段旁边展示它们(类似于MD5(rand(1,10000)))。 要完成表单,用户必须在文本字段中写入dog或cat或任何其他内容。


3
一个机器人主人只需要多次访问您的网站,下载所有图片并手动标记一次,然后他的机器人就可以将其与已经编写好的数据库进行比较,并每次写入正确的值。 - Madara's Ghost
1
布丁的证明在于品尝。这个方法已经运行了几年,而我尝试过的其他所有方法都失败了。我的大多数客户不想使用这种方法,因为他们不想要那些愚蠢的小猫和小狗图片。你建议的黑客可能行不通,因为表单字段每次都有不同的名称。我不会与你争论-这只是一个建议。 - Pete
1
一个长时间运行的验证码解决方案并不一定意味着它是一个好的验证码。可能只是因为你没有足够的流量来编写一个自定义的解决方案。 - ceejayoz
不同的名称不会阻止机器人填充它,它们可以并且每次都会读取直接的HTML源代码,对它们来说名称并不重要。也许如果你有几个这样的字段,都有随机和变化的名称,其顺序经过乱序处理(使用JavaScript,同样也是随机的方式),并且除了一个字段外其他都被隐藏起来,就可能会让机器人迷惑,无法确定该填写哪一个字段(因为如果所有字段都被填写了,PHP应该会拒绝)。 - Madara's Ghost
1
你说得对。垃圾邮件总是成批出现。有时一天会收到数千封,然后几个月都不会再有。没有完美的解决方案,这是肯定的。更改字段名称确实有所帮助 - 如果某些字段为空(即如果该字段已填写,则丢弃响应),似乎也有所帮助。 - Pete
在这里交叉了。不过是一个有趣的讨论。 - Pete

0
我在Slashdot上发现了NuCaptcha,它使用视频而不是图片来使机器人更难读取,但对于我们来说很容易,因为它不必被疯狂地打乱。到目前为止,它的效果非常好,但我同意ceejayoz的看法。如果可以的话,只需试用一下,看看您对它的看法如何。
http://www.nucaptcha.com/

2
这不是一个有效的解决方案,因为它使用了Flash。如果他们转换为canvas/HTML5元素,可能会更好。 - Nick George
1
@NickGeorge 我没有意识到它使用了Flash,我完全同意你的观点。 - Drewdin
@NickGeorge和Drewedin:问题在于,尽管HTML5是长期可取的选择,但仍有大量用户使用不支持HTML5的浏览器。虽然我很讨厌Flash,但它仍然拥有庞大的安装基础,因此它是一个可行的选择。当然,理想情况下是使用HTML5并回退到Flash... - Basic
@基本的,但是同样可以用Flash来说。随着移动市场的繁荣,需要对非Flash应用程序提供越来越多的支持。 - Nick George
1
@NickGeorge,我们绕开移动设备上的Flash问题吧,因为这总是会引起争论 :) 说实话,我希望每个人都能尽快升级 - 我只在大约6个月前(公共部门客户)才成功停止支持IE6。 - Basic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接