再談 Captcha plugin - SecureImage

早前我提過以後留言時要輸入安全碼才成,而 Madthiu 問我為何會選擇 SecureImage 作為我的 Captcha plugin,雖然我在留言中回答了他,但我覺得有需要特地開一篇文章再作補充。

選擇 SecureImage 的原因

以我所知 Captcha plugin 起碼有以下 4 款:

我選擇 SecureImage 的原因是其他的 plugins 不是需要更改 WordPress core files,便是產生出來的 Captcha 比較容易被解碼,詳情可參考 PWNtcha,而 SecureImage 除了不用更改 WordPress core files 外,在設定上很方便,在 Admin. Panel 就可以設定 Captcha 的長度、弧度、角度等,還有產生出來的 Captcha 以 PWNtcha 來說應該比較難以解碼,所以我便選擇了 SecureImage。

使用 SecureImage 的必需條件


大部份使用 UNIX 類 OS 的 web hosting 應該不用安裝便已經有 ImageMagick,而使用 Windows 平台的 web hosting 的話,就有需要下載了,整套 ImageMagick 軟件包括多套工具,但 SecureImage 只需要內裡的 convert(UNIX 版本)或 convert.exe(Windows 版本)工具而已。

使用 SecureImage 的注意事項

SecureImage 預設是會阻擋所有 pingback 及 trackback 的,大家可以使用這個 patch 去修改這個 plugin,或下載這個已修改的版本(下載後記著把 .txt 的 extension 轉成 .php)

SecureImage 產生出來的 Captcha 是包括大小寫英文字母及數字的,但因為弧度等問題,有時難以分辨,所以我便修改了只用小寫英文字母,方法如下:

首先在 secureimage.php 內搜尋 "// Generate the random string" 字串,在這句字串下面的數行正是 array 用來儲存 Captcha 使用的字符。

$chars = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G",
              "h","H","i","j","J","k","K","L","m","M","n","N","o","O",
              "p","P","q","Q","r","R","s","S","t","T","u","U","v","V",
              "w","W","x","X","y","Y","z","Z","1","2","3","4","5","6",
              "7","8","9");

大家可見有大小寫英文字母及數字,只需更改這裡,放入合你心意的字符便可,以我為例只用小寫英文字母的話,便會是:

$chars = array("a","b","c","d","e","f","g","h","i","j",
                   "k","l","m","n","o","p","q","r","s","t",
                   "u","v","w","x","y","z");

設定 SecureImage plugin

啟動 SecureImage 後,跟著便要做一些設定這個 plugin 才能正式生效,在文初提過使用 SecureImage 的必需條件是有 ImageMagick 及一個 TrueType font 的,在 SecureImage 的設定中要記下 convert / convert.exe 及 TrueType font 的路徑的,convert 的存放目錄路徑是以 UNIX 類 OS 預設的 /usr/bin/convert,如果使用 Windows 平台的話,記著路徑內的 \ 要轉成 / 及整個路徑是不可含有空格的,例如 convert.exe 是存放在 c:\imagemagick 內的話,路徑便是:

c:/imagemagick/convert.exe

在 SecureImage 設定中隨了 convert 工具及 TrueType font 的路徑設定外,還可以選擇字型的大小、Captcha 的長度、弧度、角度等等,大家可以嘗試改變這些設定看看效果如何的。

最後使用這個 plugin 是不需要更改任何 theme file 的,因為 SecureImage 已經自動 register 在 comment_form 及 comment_post 內,所以只需啟動後及設定正確,Captcha 會自動顯示在留言面版中,如果沒有顯示出來的話可以檢查一下在你使用的 theme 內的 comments.php 內究竟有沒有以下這句:,如果沒有的話,這個 plugin 就不能用在你的 theme 了。

<?php do_action('comment_form', $post->ID); ?>

如果沒有的話可以自行將這句加在 comments.php 內 </form> 前,好像以下的做法:

<form .....>
    .
    .
    .
    <?php do_action('comment_form', $post->ID); ?>
</form>

之後 SecureImage 應該可以成功運行的了。:wink:

Update (2005-09-17): 更正如果 comments.php 內沒有 do_action 這句是不能使用 SecureImage 這個說法,實則只需加進這句後 SecureImage 是可以成功運作的。

13 Responses to “再談 Captcha plugin - SecureImage”

  1. 362

    SecureImage 產生出來的 Captcha 是包括大小寫英文字母及數字的,但因為弧度等問題,有時難以分辨<-我記得!sidekick投訴過,仲好嬲,因為post唔到留言! :p
    不過我都係唔鍾意要朋友填咁多o野, 好煩...
    so far, 我用緊d plugin都幫到手, 可以唔用呢個東東~ :)

  2. 358

    小踢:我當然記得妳投訴過,所以才將 Captcha 限制在 6 個小寫英文字母,我知道有其他 plugins 可以阻擋 spam,例如 Bad BehaviorSpam Karma 2 等,但因為未有時間研究它們究竟怎樣運作,恐怕會有 false alarm(錯誤自動阻擋正常 comment)的情況發生,同時又不想大部份 comment 都要經 moderation,所以現階段選擇使用 Captcha 方式。:wink:

  3. 357

    最後那一句...實在太無奈了... :bye2:

  4. 355

    Madthiu:不是這麼幸運吧,那麼這個 plugin 真的與你無緣了。:bye1:

  5. 356

    Madthiu:我估計就算你的 comments.php 中沒有

    <?php do_action('comment_form', $post->ID); ?>

    這句,但自行加上我估計應該可以用到這個 plugin,因為 do_action 這個 command 是用來 execute 之前 add_action register 過的 function,而 SecureImage 已經做了 add_action,所以自行加這句應該可以解決問題。

    至於加入這句的位置,應該在 comments.php 中 <form> section 內,在 </form> 之前吧。

  6. 346

    Madthiu:我自己親身試過用 Neuron theme 再加以下的一句在 comments.php 的 </form> 之前,是可以成功使用 SecureImage 的。

    <?php do_action('comment_form', $post->ID); ?>

    你可以再試試看。:wink:

  7. 345

    D 字真係好難睇... 我唔覺得係好辦法... -_-
    (睇見d 咁模o既字會好mung, 覺得網主蝦人...)

    我冇用你講o個d plugin, (我用其他)
    so far , 除o左第一次o向我度留言, 又或留言入面有link 之外, 大部份朋友o向我blog d 留言都會直接出街...

    唔係恐嚇... 而家呢個plugin 比起hompy sina, blogspot 或keso 用o個d, d 字都難睇好多... 真係唔係幾好...

  8. 344

    多謝小踢意見,我遲o的會改用 Bad Behavior 同 Spam Karma 2,因為睇過出面的評價都唔錯。:worship:

  9. 343

    咁我就唔花時間玩 SecureImage 喇... :lol2:
    anyway,唔該晒天佑連我個 theme 都試埋呢~!! :worship::worship:

  10. 342

    Madthiu:長遠計你要需要加番 do_action 哩句落去 comments.php,因為有好多 plugin 都係 hook o左佢o地需要行o既 function o係唔同o既 action 度,其中一個就係 comment_form,加o左對你以後用其他 plugin 有百利而無一害o架。:wink:

  11. 2816

    謝謝你的熱心分享,因為無法發引用通告,特別在此告知引用,謝謝!
    http://tea.ymsh.tp.edu.tw/index.php?op=ViewArticle&articleId=1218&blogId=1

    可惜我弄了半天,仍然無法出現驗證碼,
    請問FreeSansBold.ttf是要放在跟secureimage.php在同一層就可以了嗎?我用絕對路徑"/home/www/xoops/modules/wordpress/wp-content/plugins/FreeSansBold.ttf"
    或原始設定都不行呢!
    我確定ImageMagick沒問題,因為我有xcgal模組用ImageMagick.
    煩您解惑,謝謝!

  12. 2879

    @agee:一年多前的文章你也留言,真的估不到,我也沒用 SecureImage 很久了,因為我自己也討厭 Captcha,現在我在使用 Spam Karma 2 和 Bad Behavior,效果不錯。

    我使用 SecureImage 時估計是用 WordPress 1.5 的,我不知道 SecureImage 和新版本的 WordPress 是否兼容,所以真的很抱歉,幫不到你。

  1. 2268 Wordpress comments at Dennys’ blog

Leave a Reply