26

Rails 中有很多验证码插件,也有很多类型的防止垃圾邮件和泛滥的解决方案。所以这不仅仅是 Rails 的问题。

让我们看看我们有哪些类型的插件:

1. 经典图片验证码zendesk 的验证码、Simple_captcha、Validates_captcha、winton 的验证码、Raptcha)。

积极的:

  • 可以有效防止自动解密(不确定 Simple_captcha,但似乎 zendesk 和 winton 的验证码都没有实现这一点,因为它们使用预先生成的图像(而不是按需),所以我们可能的垃圾邮件机器人可以从那些图像上学到的)。

消极的:

  • 需要数据库表(至少简单验证码。还不错,但他们在使用后会清理它吗?)。
  • 需要 RMagick 或类似的(对我来说不是那么实际,因为我已经在我的网站上拥有它)。
  • 手动解密失败(据我所知,2/1000 美元的图像)。
  • 对用户来说很烦人,并且会损害转化率。

2.验证码(Recaptcha,Rack-recaptcha)。

积极的:

  • 可以有效防止自动解密。
  • 不需要 Rmagick 和 DB 表。

消极的:

  • 对第 3 方站点进行 api 调用。
  • 手动解密失败。
  • 甚至比以前更烦人。

3. 蜜罐(Negative-captcha、Trap_door、Reverse_captcha、Honeypot-captcha、Bouncy_bots、invisible_captcha)。

积极的:

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

消极的:

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

4. 文本库(Humanizer、Brain_buster、Gotcha)。

积极的:

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

消极的:

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

5. 其他(Acts_as_snook)

积极的:

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

消极的:

不知道有没有,因为很不寻常。但我认为它可能会在洪水泛滥的情况下引起问题,因为有时可能需要帖子的审核。

6. 类似 Akismet 的解决方案(不知道他们的效率)。

积极的:

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

消极的:

  • 对第 3 方站点进行 api 调用。
  • 将用户的详细信息传送到第 3 方站点(非常非常糟糕)。

我还应该对我的网站说几句话。用户只能在 ajax 请求后看到受保护的表单(例如,在将某些东西放入购物车之后)。现代机器人是否有能力执行 ajax 请求和存储 cookie?

4

2 回答 2

7

泛滥是与垃圾邮件不同的问题。您绝对应该将有关速率限制的逻辑构建到您的应用程序中,您可以使用验证来检查用户是否在过去 15 分钟内没有下过超过 2 个订单。

关于验证码,您选择的任何插件都很有可能会很棒。我不会认为必须将 RMagick 安装为正面或负面的,它真的不难开始工作。如果是我选择,我的第一直觉会选择recaptcha,这是最不烦人的。

垃圾邮件是另一个问题,它通常由可以绕过您的验证码的人类用户输入。Akismet 非常适合捕获垃圾邮件,一定要看看它,你可以将它与 recaptcha 之类的东西结合使用。

最后,现代机器人非常复杂。远比我们任何人预期的要复杂得多。他们可以完全自动化浏览器,使用 OCR 读取验证码文本并生成垃圾内容,甚至可以绕过最复杂的过滤器。也就是说,这并不是要“阻止所有垃圾邮件/机器人”,而是要使进入门槛足够高,以至于对于普通用户来说不值得。

于 2011-03-15T17:35:49.810 回答
5

对现有插件的良好分析。

现代机器人非常复杂,他们的开发人员得到了很多报酬,所以他们总是试图绕过最新的防御。出于这个原因,我认为坚持使用积极维护和工作的选项是件好事,比如 ReCaptcha。我还认为用户理解界面并且知道您正在采取措施保护他们的数据感到安全。

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

它们都非常易于使用和设置,我喜欢使用 heroku 作为测试平台来快速设置某些东西,并让客户对其进行测试。我还在我的博客RailsPerformance.com上写了一些我的经验和陷阱

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

于 2012-02-02T17:27:58.807 回答