Rails - 选择验证码插件

26
有很多Rails的验证码插件,也有很多防止垃圾邮件和洪水攻击的解决方案。因此这不仅是Rails的问题。
让我们看看我们有哪些类型的插件:
1. 经典图像验证码(zendesk's Captcha,Simple_captcha,Validates_captcha,winton's Captcha,Raptcha)。
正面: - 可以有效地防止自动解密(不确定Simple_captcha,但似乎zendesk's和winton's captchas都没有做到这一点,因为它们使用预生成的图像(而不是按需生成),所以我们可能的垃圾邮件机器人可以在这些图像上进行学习)。
反面: - 需要DB表格(至少Simple Captcha需要。不太糟糕,但使用后会清理吗?)。 - 需要RMagick或类似工具(对我来说不太实际,因为我已经在我的网站上用过了)。 - 手动解密失败($2/1000张图片,据我所知)。 - 对用户很烦人,可能会影响转化率。
2. ReCaptcha(Recaptcha,Rack-recaptcha)。
正面: - 可以有效地防止自动解密。 - 不需要Rmagick和DB表格。
反面:
  • 调用第三方网站的API。
  • 手动解密失败。
  • 比以前更烦人。

3. 蜜罐(负面验证码,陷阱门,反向验证码,蜜罐验证码,弹跳机器人,隐形验证码)。

优点:

  • 用户不知道验证码的存在。
  • 不需要Rmagick和DB表。

缺点:

  • 可能会自动解密失败(是否有任何机器人可以识别这些插件?)。
  • 手动解密失败。

4. 文本型(Humanizer,Brain_buster,Gotcha)。

优点:

  • 不需要Rmagick和DB表(除了Brain_buster)。

缺点:

  • 可能会自动解密失败。
  • 手动解密失败。
  • 有点烦人(可本地化)。

5. 其他(Acts_as_snook)

优点:

  • 用户不知道验证码的存在。
  • 不需要Rmagick和DB表。

缺点:

不确定是否有因为它很不寻常而引起的问题。但我认为在洪水泛滥的情况下可能会导致帖子需要审核。

6. 类似Akismet的解决方案(不知道它们的有效性)。

优点:

  • 用户不知道验证码的存在。
  • 不需要Rmagick和DB表。

缺点:

  • 向第三方网站发出API调用。
  • 将用户详细信息传递给第三方网站(非常糟糕)。

我还应该说几句关于我的网站。用户只有在ajax请求后(例如将某些内容添加到购物车后)才能看到受保护的表单。现代机器人是否具备进行ajax请求和存储cookie的能力?


我有一个托管在Heroku上的Rails应用程序,我想在用户注册表单中使用验证码。哪种解决方案适用于生产环境?我不能在Heroku上运行RMagick,对吧? - Myna
我使用了简单的逻辑来过滤Rails表单中的垃圾邮件,并且在多个生产应用程序中运行良好。它类似于蜜罐,但有点不同:) 最近,我将这个插件移动到了gem protected_form,请查看一下。非常希望能得到反馈。 - Alexandr Subbotin
2个回答

7
洪水是与垃圾邮件不同的问题。您应该在应用程序中构建逻辑限制速率,可以使用验证来检查用户是否在过去15分钟内下了超过2个订单。
关于验证码,您选择的任何插件都很棒。我认为安装RMagick并不是积极或消极的事情,因为它真的不难使其工作。如果让我选择,我的第一反应是选择recaptcha,它是其中最不烦人的。
垃圾邮件是另一个问题,经常由可以绕过您的验证码的人类用户输入。Akismet非常适合捕获垃圾邮件,请务必查看它,您可以将其与类似recaptcha之类的东西一起使用。
最后,现代机器人非常复杂。比我们所有人预期的要复杂得多。他们可以完全自动化浏览器,使用OCR读取验证码文本并生成垃圾内容,即使是最复杂的过滤器也会被绕过。话虽如此,重点不在于“停止所有垃圾邮件/机器人”,而在于使入门门槛足够高,以至于对于普通用户而言不值得这么做。

好的,我也将使用其中一个插件进行用户注册(不发送电子邮件通知)。因此,我只能观察用户的IP以防止洪水攻击。但是,正如今天所看到的,有许多僵尸网络在这样做。因此,IP阻止是个坏主意,不是吗? - sunki
用户的IP地址可能会改变,或者他们可能有工作和家庭电脑。 - jonnii
我是指屏蔽IP地址,而不是为特定用户保存它。可以在一段时间内屏蔽IP地址,例如1小时。 - sunki

5

对现有插件进行了良好的分析。

现代机器人非常复杂,它们的开发者获得了很高的报酬,因此他们总是试图规避最新的防御措施。出于这个原因,我认为最好选择一个正在积极维护和开发的选项,比如ReCaptcha。我还认为用户可以理解界面,并感到放心,因为知道您正在采取措施保护他们的数据。

我不得不筛选所有针对项目的Rails验证码选项,并编写了一个示例应用程序供我的客户测试和尝试。 simple-captcha-demo.heroku.com

它们都非常容易使用和设置,我喜欢使用Heroku作为测试平台,快速设置一个东西并让客户测试它。 我还在我的博客上写了一些经验和注意事项:RailsPerformance.com

可能会有新的插件,查看www.ruby-toolbox.com上的趋势总是很好的选择。


不错的演示页面!如果你在意的话,顶部的reCaptcha链接已经失效了。 - Clay
@clay 谢谢。我修复了那个损坏的链接,并确保它不会再次损坏。 - J_McCaffrey

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