2011-03-15 41 views
26

Rails中有很多驗證碼插件,還有許多類型的用於防止垃圾郵件和氾濫的解決方案。所以這不僅僅是Rails的問題。rails - 選擇驗證碼插件

讓我們來看看什麼類型的插件做,我們有:

1.經典形象的captchazendesk's Captcha,Simple_captcha,Validates_captcha,winton's Captcha,Raptcha)。

正面:

  • 可以有效地防止自動解密(不知道Simple_captcha,但似乎雙方的Zendesk的和通泰的驗證碼不做到這一點,因爲他們使用預先生成的圖像(而不是按需),所以我們可能會在該圖像上學習垃圾郵件機器人)。

負:

  • 要求數據庫表(至少簡單的驗證碼不那麼糟糕,但是他們清理使用後?)。
  • 要求RMagick或類似(對我來說不是那麼實際,因爲我已經在我的網站上)。
  • 手動解密失敗(我知道$ 2/1000張圖片)。
  • 惱人的用戶,可以傷害轉換率。

2. ReCaptcha(Recaptcha,Rack-recaptcha)。

正面:

  • 可以有效地防止自動解密。
  • 不需要Rmagick和數據庫表。

負:

  • 進行API,調用第三方網站。
  • 手動解密失敗。
  • 比以前更煩人了。

3.蜜罐(負的驗證碼,Trap_door,Reverse_captcha,蜜罐-驗證碼,Bouncy_bots,invisible_captcha)。

正面:

  • 用戶並不知道驗證碼presense。
  • 不需要Rmagick和數據庫表。

負:

  • 可能無法自動解密(有沒有可以識別這個插件的任何漫遊?)。
  • 手動解密失敗。

4.基於文本的(Humanizer,Brain_buster,Gotcha)。

正面:

  • 不要求Rmagick和數據庫表(除了Brain_buster的)。

負:

  • 可能無法自動解密。
  • 手動解密失敗。
  • 有點煩人(可以本地化)。

5.其他(Acts_as_snook)

正面:

  • 用戶並不知道驗證碼presense。
  • 不需要Rmagick和數據庫表。

負:

不知道有沒有什麼,因爲這是非常不尋常的。但是我認爲這可能會在洪水氾濫的情況下造成問題,因爲在某些時候它可能需要郵局的節制。

6.類似Akismet的解決方案(不知道它們的效率)。

正面:

  • 用戶並不知道驗證碼presense。
  • 不需要Rmagick和數據庫表。

負:

  • 進行API,調用第三方網站。
  • 將用戶的詳細信息提供給第三方網站(非常非常糟糕)。

我也應該對我的網站說幾句話。用戶只能在ajax請求(例如將東西放入購物車之後)後才能看到受保護的表單。現代的機器人是否有能力做Ajax請求和存儲Cookie?

+0

我有一個Rails應用程序託管在Heroku上什麼,我想要使用captcha進行用戶註冊表單。生產中哪種解決方案可行?我無法在Heroku上運行RMagick? – Myna 2012-08-08 15:22:19

+0

我已經使用簡單的邏輯從垃圾郵件過濾軌道表單,並且在多個生產應用程序上運行良好。這就像蜜罐一樣,但有點不同:)最近我把這個插件移動到gem [protected_form](https://github.com/KELiON/protected_form),檢查出來。很高興有反饋意見。 – 2014-05-14 15:03:08

回答

6

氾濫是與垃圾郵件不同的問題。您應該在應用程序中構建圍繞速率限制的邏輯,您可以使用驗證來檢查該用戶是否在最近15分鐘內未放置超過2個訂單。

關於驗證碼您選擇的任何插件最有可能會很棒。我不會認爲必須將RMagick安裝爲正面或負面,但實際上並不難。如果是我選擇的話,我的第一本能就是和recaptcha一起去,這是他們所有人中最不討厭的。

垃圾郵件是另一個問題,它通常由可繞過驗證碼的人類用戶輸入。 Akismet非常適合捕捉垃圾郵件,絕對看看它,你可以將它與recaptcha一起使用。

最後,現代的機器人非常複雜。比我們任何人想象的都要複雜得多。他們可以完全自動化瀏覽器,使用OCR讀取驗證碼文本並生成垃圾內容,即使是最複雜的過濾器也會繞過。也就是說,並不是要「阻止所有垃圾郵件/機器人」,而是要讓進入的門檻高到足以讓臨時用戶不值得。

+0

那麼,我也將使用其中一個插件用戶註冊(沒有電子郵件通知)。所以我只能看用戶的IP來防止洪水。但是如今所見,有許多僵屍網絡正在這樣做。所以IP阻塞是不好的主意,不是嗎? – sunki 2011-03-15 18:42:37

+0

用戶IP更改,或者他們可能有工作和家用計算機。 – jonnii 2011-03-15 18:47:23

+0

我的意思是阻止IP而不是爲特定的用戶保存它。 IP可以被阻塞一段時間,例如1小時。 – sunki 2011-03-15 18:54:08

5

對現有插件的良好分析。

現代的機器人非常複雜,他們的開發人員付出了很多,所以他們總是試圖繞過最新的防禦。出於這個原因,我認爲它很好地堅持一個積極維護和工作的選項,像ReCaptcha。我也認爲用戶知道你正在採取措施來保護他們的數據,因此他們理解界面並感到安全。

我不得不篩選一個項目的所有rails captcha選項,併爲我的客戶寫了一個示例應用程序來測試和嘗試。 simple-captcha-demo.heroku.com

他們都非常易於使用和設置,我喜歡用heroku作爲測試平臺來快速設置某些東西,並讓客戶端進行測試。 我也寫了我的一些經驗和陷阱在我的博客RailsPerformance.com

可能會有新的插件,它總是很好看的趨勢是 www.ruby-toolbox.com

+0

不錯的演示頁面!最高層的reCaptcha鏈接被破壞,以防萬一。 – Clay 2012-02-13 02:43:52

+0

@clay謝謝。我修復了那個斷開的鏈接,並且使它不會再破壞。 – 2012-02-13 20:39:45