會員中心 | iThome online | iT邦部落格 | 小7聚樂部

載入中...

twtw

IT邦好手
4級

[RoR] 簡單建置 captcha 圖形驗證的機制

什麼是 Captcha?也有 中文 的相關說明。常會看到類似這樣的圖形:

接續前幾篇利用 ImageMagick 相關的圖形議題,可快速加上 captcha 的機制。



發佈到:發佈到Facebook 發佈到噗浪 發佈到twitter
分享時間:2008-10-09 04:44:19
▼ ADVERTISEMENT ▼
分享內容(
13
簡而言之,就是做成人可以辨識,但無法利用程式軟體去辨識的圖形,要人親自回應圖形內容是什麼,才提供請求服務之機制。通常會在可以留言、註冊帳號、下載檔案等功能中,加入這 Captcha 的機制,以防止被透過程式,造成大量的 spam 留言,註冊、下載;為了防止辨識軟體破解,而會將圖形做一定程度的扭曲,目的是使真人看得懂,但程式無法辨識出,這是圖形特色。

安裝 captcha 的 plugins
RoR 中加入 Captcha 的機制有幾種的解決方式,在此用最簡單的方案 Simple Captcha ,只要照著該文的步驟,很快就可以建置此機制。
# 如果系統沒有 subersion 的話,會無法執行再下一個指令(有關 svn: 的網址下載),才需要先做安裝 subversion 的動作。
yum install subversion
# 安裝 plugins
script/plugin install svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha
rake simple_captcha:setup
rake db:migrate
# 在 config/routes.rb 編輯:
ActionController::Routing::Routes.draw do |map|
...
# 多加這一行:
  map.simple_captcha '/simple_captcha/:action', :controller => 'simple_captcha'
...
end
# 在 app/controllers/application.rb 編輯:
ApplicationController < ActionController::Base
...
# 多加這一行:
  include SimpleCaptcha::ControllerHelpers
end

captcha 使用的環境設定完成。

使用 captcha 的機制
以前一日 [RoR] 簡單畫出 Web 2.0 特色圖形 Badges 徽章 標記 的例子為例,要加上 captcha 只要在 app/views/demo/index.html.erb 裡:
<%= show_simple_captcha(:label => "請輸入您所看見的字母", :image_style => "random", :distortion => 'medium') -%>
# 在 <%= submit_tag "畫出預覽", :name => nil %>  這一行的上面加入上面這一行

上述的 show_simple_captcha 的其他參數語法,可詳見該網站 Simple Captcha 來測試出會有怎樣不同的畫面。

而在 相對應的 controller 之中,只要將需要做這個圖型驗證的 action ,加入
  if simple_captcha_valid?
    do_this # 原有的 action 動作
  else
    do_that # 不進行上述 action 的回應
  end
這樣的語法,就可先檢查圖型驗證是否正確,而決定是否執行該動作:
所以在 前一篇 的原始碼中 app/controllers/demo_controller.rb 加入上述的語法:
def star
if simple_captcha_valid?
# 若沒有 text 的參數,用此預設值寫出字來
...
else
    render :text => "識別碼不對,請回上一頁,重新整理後再輸入新的正確的識別碼"
end

end

這樣在接續 前一篇 的程式碼,再加上述的語法,就會出現像

就可利用 captcha 而達到防止被濫用的目的。

參考資料:http://expressica.com/simple_captcha/

[RoR] 簡單建置 captcha 圖形驗證的機制
gric( IT邦高手9級 )
2009-03-14 13:23:50
感恩分享咯!

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

廠商來幫忙

Openfind
Intel
   infobox
savemore
nssit

關於「廠商來幫忙」>>

邦友收藏動態

最新收藏最多人推最多人收

新增收藏

安裝「收藏快捷鍵」

安裝「收藏快捷鍵」,可以讓邦友直接透過Google工具列上的按扭,快速收藏站內、站外的網頁。

訂閱每日摘要

iT邦幫忙即日起提供「每日摘要」給尚未註冊的邦友,只要輸入您的E-mail,每日就可以收到最新的發問與分享