我有一个网站电子邮件表格。我使用自定义的验证码来防止机器人发送垃圾邮件。尽管如此,我仍然收到垃圾邮件。

为什么?机器人如何击败验证码?他们是使用某种高级OCR还是从存储位置获取解决方案?

我该如何预防?我应该更改为另一种验证码吗?


我确定电子邮件来自表单,因为它是从提供表单消息的电子邮件发送者发送的。字母样式也相同。作为记录,我使用的是PHP + MySQL,但我没有在寻找解决此问题的方法。我对一般情况下机器人如何击败这些技术感兴趣。我只是以这种情况为例,所以您可以更好地理解我的要求。

评论

我想反驳您的问题:人类如何击败CAPTCHA:更多时候,这并不需要我多次甚至很多次才能通过。

如果有人认为这个问题值得批评,请至少向我解释原因。
@Blrfl,我不明白这与主题无关。

如果您想让我们回答您的问题,请首先证明您不是机器人。

@Blrfl但是,它确实与高质量的软件开发有关。

#1 楼

两种通过CAPTCHA的最简单方法:


使用人工农场,即像ProTypers一样,要求人们以金钱来填充CAPTCHA。


使用OCR。


CAPTCHA机制本身或周围的应用程序中也可能存在错误,从而使某些人可以绕过CAPTCHA。
W3C文章CAPTCHA的不可访问性:Web上的Visual Turing测试的替代方法也说明了如何破坏CAPTCHA:

[...]最早记录在系统上的攻击之一是卡内基梅隆大学该学生将CAPTCHA图像与成人网站的访问相关联,从而获得了免费的人工来破解身份验证。外部项目的方法和结果表明,使用光学字符识别,许多系统可以被精度在88%到100%之间的计算机击败。

那么如何防止这些攻击呢?


如果您有自定义实现的验证码,则可以尝试使用流行的验证码,例如reCAPTCHA。
如果您自己的CAPTCHA对OCR太容易了,或者有一个被成功利用的bug,那么这将有所帮助。


如果您使用流行的CAPTCHA机制,请转到定制的



从技术上讲,没有什么可以阻止人类的农场:您可以创建动画GIF,其中几帧可以很快显示不同的文本,而实际上只有一帧在用户可见的情况下,您可以在各个方向上使文本变形或弯曲,或者找到新的替代方法来防止OCR识别文本,但为解决CAPTCHA而付出代价的人仍然可以成功完全解决它们。
您可能希望从视觉验证码转换为声音(如果您尚未使用两者,并且应该使用),但这意味着有听力障碍的用户将无法使用您的应用程序。

在注释特定于域的验证码中提到了FrustratedWithFormsDesigner和GalacticCowboy。我试图找到一些有关其有效性的材料,但是没有成功,所以这只是我个人的看法:


当实际用户不知道时,特定于域的CAPTCHA可能会非常烦人有关答案的信息。
示例:我正在访问一个面向电影的网站上的一个页面。我在文章中发现一个错误,并想对此发表评论,以通知作者该错误。注释表格要求我作为验证码机制提供照片上显示的女演员的名字。我不知道这位女演员是谁,所以我唯一能做的就是离开网站(或者在接下来的两分钟内使用Google图片)。
另一个例子:一个网站要求提供“神秘”的同义词”。对于一个说英语流利的无障碍人士来说,这听起来很容易,但是如果没有外部帮助,英语不好的人或有一定发育障碍的人就无法解决,这不算发现同义词或反义词是总是很棘手。


大多数这些特定于领域的问题都可以通过编程方式解决。我给出的两个示例都可以使用外部资源(Google图片和同义词字典)轻松解决。 FrustratedWithFormsDesigner作为示例提供的有关晶体管的方法更好,但仍可能可以通过定制的bot解决。


无人能抵挡人类的农场。


它们要么生成数据,就像普通文本验证码绘制扭曲的字符一样,在这种情况下,生成算法本身就可以被利用来调整机器人,或者它们可以在某个地方找到数据,就像reCAPTCHA从扫描的书本中获取文本一样,机器人可以在哪种情况下使用此数据(例如,如果您从词典中取出单词,要求用户提供同义词,则机器人可以使用相同的词典获得100%的成功)。



评论


+1表示无法保证CAPTCHA可以正常工作

–尼尔
13年6月6日在13:19

我看过一些新颖的验证码,这些验证码非常针对特定领域。其中一个显示电阻器的图像,用户必须输入电阻器(其中有一个指向不知道如何读取电阻器色带的人的帮助页面链接)。另一个具有一小段乐谱的图像,并且用户必须输入某些音符(例如“仅第二和弦中的音符”)。它们仍然可以玩游戏,但垃圾邮件发送者的成本可能不值得。

– FrustratedWithFormsDesigner
2013年3月6日15:16



@MainMa在技术报告中有一篇帖子,某人设计了一个可以非常快地击败验证码的机器人,因为它忽略了视觉效果,而是用它来解释音频提示,因此最终必须在其中添加静态元素。音频之一,这反过来使用户更难

– RhysW
13年3月6日在15:54

@RhysW:我提到的W3C文章还提到从图像转换为音频并不能解决机器人问题,甚至可能使机器人更容易。

– Arseni Mourzenko
2013年3月6日在16:00

人类农场。为什么我要绘制矩阵图?

– LarsTech
13年6月6日在16:53

#2 楼

添加到MainMa的答案中...

垃圾邮件发送者欺骗其他人为他们做验证码

基本上,垃圾邮件发送者建立了一个warez网站或一个色情网站,这些网站似乎都设有CAPTCHA在它上面,但是它不是真正的验证码。僵尸程序会从想要发送垃圾邮件(或以其他方式利用)的网站上提取CAPTCHA,然后将其显示在warez网站或色情网站上,该网站是有人为他们完成的。然后,CAPTCHA值将传递回他们的机器人。

关于垃圾邮件发送者的更多信息

我使用reCAPTCHA,我发现它基本上毫无用处。我还使用了一个自定义的垃圾邮件过滤器,该过滤器可以捕获从reCAPTCHA过去的垃圾邮件,因此我需要每隔几天对其进行检查,以防误报。

我的论坛也都是自定义编写的,并且很少交通。我不相信有人对我的网站进行了特定的攻击。不过,我的垃圾邮件过滤器每天仍会收到2k封垃圾邮件!该网站上永远不会显示任何内容。垃圾邮件发送者不会从我的垃圾邮件中受益,但他们仍然可以。

我可以记录所有垃圾邮件发送尝试中的模式。我可以告诉你:撇开垃圾邮件发送者如何通过验证码,显然,垃圾邮件发送者正在使用蛮力技术来更改填写的字段以及填充这些字段的数据和单词混合的种类。显然,他们这样做非常便宜(包括绕过CAPTCHA),以至于对单个站点进行分析以查看它们在做什么或不起作用,甚至都不需要付费。

年复一年,他们继续每天以成千上万的垃圾邮件作为目标针对我的网站,但每个月才获得一次,而一天后便被手动删除。垃圾邮件便宜到了!

这将是未来数年的战斗。特别适用于像我这样的小型单人主持人站点。


编辑6/22/2017:
我想补充一点,因为这篇文章google已经完全修改了reCAPTCHA,并且在撰写本文时,它一直在正常工作。尽管我怀疑可能存在一些误报,或者给用户带来了痛苦,因为自从实施以来,帖子的数量有所减少。 2大变化是

1)他们使用图片而不是文本(因此不再使用OCR)

2)他们将其与所有网站上的用户活动结合在一起使用reCAPTCHA。因此,如果您通过站点A上的reCAPTCHA,然后转到站点B,它甚至可能不会提示您证明自己是人类!同样(我认为),如果您在太多网站上点击了太多reCAPTCHA,它也会标记您。我确定它也会根据用户活动使用其他类型的AI。

我相信这只是时间问题,直到垃圾邮件发送者也将其击败...

评论


对于小型网站来说,这可能是reCAPTCHA的最有力论据:Google拥有更多资源来跟上当前的垃圾邮件技术。

–斯蒂芬·C·斯蒂尔
17年6月22日在14:57

#3 楼

您是否尝试过使用猫狗验证码?我有一个论坛,具有标准的验证码并已对其进行了更改,此后没有任何垃圾邮件。

#4 楼

如果您使用的解决方案不是太复杂,则可能是被剥削的超低价劳动力所针对的网站,而人们正在手动输入您的CAPTCHA短语。



也有可能您的代码中存在一个错误,可以绕过验证码。

不要以为机器人在击败您的验证码。全面考虑您的系统,看看它是否已被破坏。

评论


我将图像和CSS方案结合在一起,使人类无法轻松进行分类。

–埃里克·雷彭(Erik Reppen)
13年6月6日在14:10

两个词...机械土耳其人。亚马逊已经使验证码崩溃的代价令人难以置信。

–迈克尔·布朗(Michael Brown)
13年3月6日在20:11

#5 楼

其他人则讨论了垃圾邮件发送者如何规避验证码。以下是有关
我该如何预防的提示:

请注意,没有灵丹妙药,垃圾邮件发送者似乎比游戏先行了一步。因此,您将不得不使用多种技术的组合


使用蜜罐形式
使用验证码或逻辑问题。基本问题如“苹果,鱼,手,六个-其中哪些是身体的一部分”
请稍候。如果表单是在页面加载后5秒钟内发布的,则忽略请求,大多数机器人会在不到一秒钟的时间内发布该表单。
具有一些IP地址监控-如果您发现蜘蛛在爬网的网站不是白色,列出(google,bing),然后将其列入黑名单并禁止其IP地址。最好在代码/软件中是动态的/自动化的


#6 楼

为了回应其他答案,您可能会遇到使用人工农场为他们输入验证码的机器人。

我最近讨论了一种阻止垃圾邮件机器人的技术(并发布了随附的Drupal模块)。通过要求客户端JavaScript。据我所知,在所有使用此代码的网站上,此方法的工作效率均为100%。想法是使用AJAX生成唯一的哈希,并将其与其他表单数据一起提交,然后在提交表单后在后端计算相同的哈希,然后比较两个值。

我的博客文章中的全部详细信息(巧合的是,由于您提到使用PHP + MySQL,因此这些技术与此处描述的相同)。消除垃圾邮件...

评论


这将一直有效,直到它变得广泛并且垃圾邮件发送者使用无头浏览器。

– Xavier Combelle
2013年3月12日19:20

使用无头浏览器如何更改任何内容?

–塔蒂亚娜·拉切娃(Tatiana Racheva)
13年3月3日在17:49

#7 楼

如果您的网站是Twitter,并且有人专门针对它(而不是机器人找到它),那么您可以停止阅读...表格。
1。不要在类型,名称或占位符中包含带有“电子邮件”的字段,对所有字段都使用简短或误导性的名称。
2。不要使用实际的html表单元素和提交按钮。而是使用AJAX将其发布到普通div(样式看起来像一个按钮)上即可。
3。不要在HTML中放置onclick事件,而要在JavaScript中添加一个侦听器。
4。使用JavaScript填充“在此处输入您的电子邮件地址”的任何提示,因为机器人在拖曳页面时可能实际上不会触发JS(不确定这一点,但我还是这样做)。