当机器人攻击!

26

除了CAPTCHA之外,还有哪些受欢迎的垃圾邮件预防方法?


1
看起来几乎所有的回答者都没有注意到你说“除了验证码”...这是一个很好的角度,因为验证码已经失效并且不起作用了。 - AviD
27个回答

23

我尝试了使用“蜜罐”技术,即在表单中添加一个字段并使用CSS隐藏它(对于那些禁用样式表的用户标记为“留空”),但我发现很多机器人可以轻易地绕过它。还有其他技术,比如将字段设置为特定值并使用JS更改它们、计算加载时间和提交时间之间的时间差、检查引荐页面的URL等等。它们都有各自的缺陷,基本上你能做的就是尽可能使用这些技术进行过滤,同时不要让你的用户感到被排斥。

但归根结底,如果你真的、真的不希望机器人通过你的表单发送信息,你需要在上面加上验证码。我见过最好的解决方案是reCAPTCHA,它几乎可以应对所有情况,但由于印度的验证码破解市场以及垃圾邮件发送者的创新思维,即使采用这种方法也不能完全成功。因此,我建议谨慎使用那些“巧妙而又与众不同”的方法,因为对于已经习惯了普通验证码的用户来说,这可能会令他们感到困惑。


我喜欢CSS技术。它在各个方面都表现得非常出色。我也会投票支持这个答案,但我没有剩余的投票了!:D - Till
1
实际上,这是最简单的技术之一可以轻松绕过。如果垃圾邮件发送者想要滥用您的网站,他就会这么做。唯一能保护你的是,如果你的代码不够重要,没有人会花时间去研究它。 - AviD
1
-1 这很有趣,解决方案被垃圾邮件机器人自动绕过,甚至不需要人类解决者的参与。集成到专业机器人中的商店API被标记为答案。这是出于无知还是故意? - Gennady Vanin Геннадий Ванин

18

令人震惊的是,几乎每个回答都包括某种形式的CAPTCHA。原帖作者想要的是不同的东西,我猜他可能想要的是实际管用的解决方案,甚至可以解决真正的问题。
CAPTCHA并不起作用,即使它起作用了——它也是错的问题——人类仍然可以淹没你的系统,并且根据定义CAPTCHA无法阻止这种情况(因为它只是设计用来判断你是不是人类——但并不能很好地做到这一点...)

那么,还有哪些其他解决方案呢?这取决于您的系统和需求。例如,如果您要做的只是限制用户每小时/每天/每周可以提交多少次“联系我”表单,您可以简单地限制每个用户可以提交多少请求。如果您的用户是匿名的,也许您需要根据IP地址进行限制,并偶尔将IP列入黑名单(尽管这也可以被规避,并引起其他问题)。
如果您正在参考论坛或博客评论(如此类),那么我使用的越多,就越喜欢这个解决方案。经过身份验证的用户、授权(基于声誉,不容易通过淹没积累)、限制(每天可以做多少)和偶尔的CAPTCHA,最后是社区管理来清理一些通过的——这些共同提供了一个不错的解决方案。(我想知道Jeff能否提供有关实际垃圾邮件和其他恶意帖子的信息...?)

还有一个要考虑的控件(不知道这里是否有),是某种IDS/IPS形式——如果您能检测和识别垃圾邮件,就可以阻止那种模式。这里手动填充了需要管理的部分...

请注意,其中任何一个都不能预防垃圾邮件,但是逐步地降低概率,从而降低利润率。 这改变了经济方程,并使得CAPTCHA提供足够的价值以值得使用——因为对于垃圾邮件发送者而言,破解它或绕过它已经不值得麻烦(由于其他控件)。


12

给用户提供计算的可能性:

3和8的总和是多少?

顺便说一句:刚刚浏览了微软研究团队的一个有趣方法:Asirra。

http://research.microsoft.com/asirra/

它会向您展示几张图片,您需要识别其中带有给定主题的图片。


1
我以前也曾经成功地使用过这个。2+2等于多少?任何定制化、易于用户和易于你自己的东西都是最好的解决方案。 - Jason Short
CAPTCHA指的是自动图灵测试,而向人类提问也属于这个定义范畴。 - Kornel
我查看了Aksimet,发现它非常有趣,而且这是一个很好的想法,因为动物识别是机器人非常糟糕的事情。仅基于这一点,我会投5个赞 :D - David Frenkel
1
如果我在95年花了20美元买了微软的股票就好了 :/ - divinci
我在我的网站上使用了Asirra,它的表现非常出色。我向任何人推荐这个工具。而且,它不像CAPTCHA那样令人沮丧。它对用户来说是有趣的,并且有助于宠物被领养。对我来说是胜利,对我的用户来说也是胜利,对被遗弃的宠物来说也是胜利。 - Eric

10

试试Akismet

从可用性角度来看,验证码或任何人类专用问题都很糟糕。有时他们是必要的,但我更喜欢使用像Akismet这样的过滤器来杀死垃圾邮件。

Akismet最初是为了防止WordPress博客上的垃圾评论而构建的,但其API可以被适应于其他用途。

更新: 我们已经开始在我们的Rails应用程序Yarp.com上使用Ruby库Rakismet。到目前为止,它一直在成功地防范垃圾邮件机器人。


1
我很想知道他们基于什么,但我想这主要是像广告结合URL链接这样的常见模式。 - David Frenkel
我认为他们使用了多种输入,包括针对类似贝叶斯的过滤器的内容、URL、源IP地址等。 - Ryan McGeary

7

一种对用户没有负担的非常简单的方法,就是在页面加载后禁用提交按钮一秒钟。我曾经在一个不断被垃圾邮件攻击的公共论坛上使用过它,并且成功地阻止了这些攻击。


挺有趣的建议,我可能会尝试一下。谢谢你的回答。 - Jose Vega
2
我不明白。机器人是否关心提交按钮是否启用? - Seun Osewa
我猜他们在计时器被禁用的时候点击了它,揭示了他们不尊重计时器的事实。 - Paweł Polewicz
-1 - 机器人几乎总是忽略 JavaScript。 - Lotus Notes

7
Ned Batchelder提出了一种结合哈希和蜜罐的技术,用于防止机器人的攻击,效果非常好,无需验证码,只需要代码。
它发布在「利用哈希和蜜罐停止垃圾邮件机器人」上。
与其通过让人们进行身份验证来阻止机器人,我们可以使其难以成功地发帖,或者让他们无意中将自己识别为机器人。这样可以减轻人们的负担,并让评论表单免受可见的反垃圾邮件措施的影响。
这种技术是我在此网站上防止垃圾邮件机器人的方法。它有效。此处描述的方法根本不考虑内容。它可以与基于内容的预防措施(如Akismet)相结合,但我发现它单独运行得非常好。

5

http://chongqed.org/ 维护活跃垃圾邮件来源和在垃圾邮件中被广告的URL的黑名单。我发现过滤后者对论坛非常有效。


4

我观察到最常见的一种是,基于用户输入来解决简单的谜题,例如:下面这张图片是一只猫(显示周围有几只狗的缩略图)。或者是简单的数学问题。

虽然这很有趣,但我相信技术竞赛也将会压倒那些系统。


4
你可以使用Recaptcha至少使验证码有用。然后,您可以使用简单的口头数学问题或类似问题来制作问题。微软的Asirra让您找到猫和狗的图片。要求提供有效的电子邮件地址以激活帐户可以阻止垃圾邮件发送者,因为他们无法从该服务中获得足够的好处,但也可能会阻止正常用户。

3
对于人类版主而言,能够轻松地查找并删除某个IP地址下的所有帖子,或者根据机器人智能程度使用注册帐户查找并删除某个用户的所有帖子,肯定会有所帮助。同样,可以轻松地在一段时间内屏蔽IP地址或帐户,无需进一步管理,这将减轻人类版主的行政负担。
使用Cookie让机器人和垃圾邮件发送者相信他们的帖子实际上是可见的(只有他们自己看得到),防止他们(或喷子)改变策略。让垃圾邮件发送者和喷子看到其他垃圾邮件和喷子的消息。

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