1/09/2009

ReCAPTCHA 與 ReCAPTCHA Rails Plugin

我們不管是註冊,或是去便當狗下載東西,都會有一張圖裡面有字,然後要你 keyin 正確的字。那個東西叫做 CAPTCHA。 CAPTCHA 是 ”Completely Automated Public Turing test to tell Computers and Humans Apart”的縮寫,主要用途是為了防止 robot Spam所做的手段。我看過最討厭,最難懂得 CAPTCHA 就是 Google 的 CAPTCHA,每次看都要硬猜個一兩次才會對,大概是他們整天被 Spam 攻擊,只好連真人都開始防堵 XD

而什麼是 ReCAPTCHA 呢? ReCAPTCHA 是卡內基美隆大學的一項計畫,由卡內基美濃學院資訊科學系執行。主要目的是為了加快實體文本數位化而作的一個手段,一般來說實體文本數位化需要的是數位掃描的技術,但是還是有很大量的書籍裡面的字礙誨難懂,有可能是紙張變質,也有可能是以前人的書寫習慣不公整(就是講我XD),這個時候就需要人力去辨識字的內容,並且給予機器正確的 return,順便 training 數位技術 Algorithm。很可惜的是,人力是要錢的。所以他們想出一個聰明到嚇死人的方式來處理這個問題。

他們開發了一個網站,叫做 ReCAPTCHA 。裡面提供 CAPTCHA API ,讓網站開發者當需要 CAPTCHA 的技術時候,可以直接 Implement 這個 API,而不需要依賴自己重新開發 CAPTCHA 技術。他們並且號招很多志願者開發各種語言版本的 API,來加速網站開發者 implement ReCAPTCHA的速度。以下是 ReCAPTCHA 的截圖



那為何他要免費提供這樣的服務呢?我們來仔細看他的技巧來自於 CAPTCHA 圖片本身,ReCAPTCHA 的圖片都是兩個英文字



左邊的字 following 是他們已經確認掃描正確的字,右邊的 finding 是他們還無法用掃描確定意義的字。當使用者在 keying 認證碼的同時,他只要確定左邊的「following」是正確的,他們就認為是正確的 input,予以放行,但是使用者不是也 keyin 右邊的字嗎?那那個 input,ReCAPTCHA網站就視為你順手幫我做的影像校正,存到資料庫裡面。網站開發者免費得到 CAPTCHA 技術,ReCAPTCHA 獲得數以百萬記的免費人力幫忙校正,是個典型的雙贏局面。

至於 Ruby 裡面有沒有 ReCAPTCHA API 呢?當然有。ReCAPTCHA for Ra ils 主頁在此。安裝方式就是


ruby script/plugin install git://github.com/ambethia/recaptcha.git



安裝完成之後,你必須要先去 ReCAPTCHA 網站註冊,他會給你一個 PUB key 跟 Private key,將他記錄在 Rails 的 config/enviroment.rb 裡面




1
2
ENV['RECAPTCHA_PUBLIC_KEY'] = "public_key_goes_here"  
ENV['RECAPTCHA_PRIVATE_KEY']= "private_key_goes_here"


接下來就是使用 ReCAPTCHA 啦,你要將 ReCAPTCHA 放在你需要的地方,這邊唯一要注意的地方在於你必須要放在 form 裡面



1
<%= recaptcha_tags %>  



接下來要驗證對方 keyin 的認證碼正不正確,我們只需要在相關的 controller 放入




1
2
3
4
5
if verify_recaptcha  
#正確的處理方式
else
# 錯誤的處理方式
end


然後,沒啦,很簡單吧!!!