Captcha:矛與盾的戰爭

2005 年 三月 18 日 (星期五) 8:32 pm
分類:電腦
標籤:,

“Captcha”,很奇怪的字眼是吧?它是個很有趣的玩意兒,是攻守激烈的電腦戰場。如果你有在玩 MSN Messenger,或是常常註冊帳號,你可能早就遇過它,只是你不知道它叫 “captcha”。

譬如說,當我們想使用 MSN Messenger,微軟會要我們先申請一個 .NET Passport 帳號。你會發現,除了正常的基本資料之外,它還會要我們輸入一串怪怪的字:
[.NET Passport 的例子]

這簡直是整人嘛!歪七扭八的,視力差一點的人,可能根本就看不懂它在寫什麼。怎麼繼續註冊呀?

不只微軟的註冊程序這麼整人,就連國內知名的程式設計網站 Java 技術論壇也有如此的登入畫面,所幸沒有太歪七扭八的折磨人:
[JavaWorld 的例子]

這是怎麼一回事呢?請看微軟怎麼說:

Q: 為何需要輸入圖片中的文字才可註冊?

A: 輸入圖片中的字元,以協助我們確認並非自動註冊程式在註冊帳號。

這點非常重要,因為駭客將使用惡意程式試圖透過網路服務註冊許多帳號,如 .NET Passport。他們可以使用這些帳號造成其他使用者的困擾,例如發送大量垃圾郵件,或是同時重覆登入數個帳號,導致系統速度緩慢。

在大部分的情況下,自動註冊程式無法辨別圖片內的字元。

也就是說,駭客一旦分析出網站註冊系統的輸入欄位規則,就可寫程式自動餵大量假資料給註冊系統,輕易取得成千上萬個新帳號,當投票部隊、幽靈人口等等。同理,駭客一旦分析出網站論壇發言系統的輸入欄位規則,就可寫程式自動餵大量假資料給論壇發言系統,輕易灌水(「洗版」);駭客一旦分析出 blog 系統的留言回應 (response)、引用 (trackback) 規則,就可寫程式自動餵大量鏈結資料給 blog,輕易增加該鏈結的 Google 排名 (PageRank)……其他種種應用,請舉一反三。

因此,網站管理者希望有一套機制,可以辨識出遠端訪客到底是「真人」還是「程式」,以杜絕上述的濫用情況。

聰明人想到一種做法。製造出某些文字/數字圖片,但這些「字」並不是老老實實的立正站定,而是搗蛋作怪:扭曲、變形、塗抹、弄髒……他們的論點是:「正常人」一眼就認得出這些「搗蛋之作」裡面是什麼字,但「影像辨識軟體」卻很難分析出正確答案(至少以目前的影像辨識技術而言)。如此一來,便可將「真人」與「程式」區分出來。

這種搗蛋圖片就叫做 “captcha”,唸起來像是 “capture ya”:「逮到你了!」哈哈!!!

當然啦,搗蛋得越嚴重,越能愚弄程式;但過猶不及,人類可能也會被考倒呢!像最前面舉的微軟例子,你能一眼就看出這鬼畫符是在寫些什麼嗎?

有堅固的盾,就有人處心積慮想打造更鋒利的矛。一攻一守,精彩得緊!像 PWNtcha 就是試圖突破 captcha 防線的計畫。從這網站裡你可以看到它的戰果:某些 captcha 系統乖乖伏首稱臣,某些還在進攻;某些頑固份子,則連肉眼都難以辨認,鎩羽而歸本是應該。

“Captcha” 算是有實際應用,又有理論研究價值的課題。像在 Wikipedia 的 captcha 條目中,可看出這題材有多活躍。從這裡我才知道,原來 “captcha” 的學名是 “completely automated public Turing test to tell computers and humans apart” 的頭字語縮寫呢!這……還真會硬湊呀!原本 “Turing test” 這個人工智慧領域 (artificial intelligence; AI) 的聖杯,是設計出具智慧的電腦軟體,聰明到連人類都分辨不出遠端用戶是真人還是電腦;現在 captcha 卻反其道而行,是設計出具智慧的電腦軟體,聰明到分辨得出遠端用戶是真人還是電腦。

怎麼樣?想替自己的網站加上 captcha 防線嗎?在 WordPress 上,你可以試試以下這兩套外掛:TrencaspammersAuthImage(如果你用的是其他的 blog 系統,請自行上網搜尋對應的 captcha 方案吧)。我選的是與 WordPress 1.5 運作順暢的 Trencaspammers,網站雖然充滿西班牙文,但下載的檔案附有英文的 readme.txt,很容易懂。在安裝之前,你的 PHP 必須先支援 GD 圖形處理程式庫,然後再依照作者在 readme.txt 裡的說明來安裝、修改三個檔案。不過,如果你的 WordPress 是 1.5 版,我建議改用以下方式處理:

  • 在外掛管理選單裡啟用 trencaspammers.php 主檔。
  • 修改 WordPress 主系統的 wp-comments-post.php 檔,將以下的程式片段\

    else :
      if ( get_option('comment_registration') )
        die( __('Sorry, you must be logged in to post a comment.') );
    endif;

    改成這樣:

    else :
      if ( get_option('comment_registration') )
        die( __('Sorry, you must be logged in to post a comment.') );
      $ts_code=trim($_POST['ts_code']);
      $ts_random=$_POST['ts_random'];
      if ( !ts_is_human($ts_random, $ts_code))
        die( __('Error: please type the security code.'));

    endif;

  • 照作者的示範,修改目前佈景主題 (theme) 裡面的 wp-comments.php 檔,並記得要將以下的程式片段\

    <img src="/wp-content/plugins/trencaspammers.php?

    改成這樣:

    <img src="<?php echo get_option('siteurl'); ?>/wp-content/plugins/trencaspammers.php?

怎麼樣?試成功了嗎?


◤建議您一併閱讀以下文章:

24 項留言回應 給 “Captcha:矛與盾的戰爭”

  1. 1 william 留言:

    文章被 http://cstku.why3s.org/index.php?p=367 全文拷貝過去,又沒留下出處。因此,在該處留言道:

    你這篇文章,乃全文拷貝自我的 blog 文章:
    http://william.cswiz.org/blog/archives/2005-03-18/captcha/

    我的 blog 最底下都有說明是以 Creative Commons 的「姓名標示、非商業性、相同方式分享」授權,所以請你保留此文的出處。

    Comment 由 william — 4/29/2005 @ 1:11 am

  2. 2 chlang 留言:

    以後你應該還會出一篇來評判目前網路上盜用文章的情況吧 ^^;
    (按照你的習慣. 應該早就寫好了)

  3. 3 Abbe 留言:

    抱歉我已經將文章出處寫上~~

  4. 4 bingu 留言:

    admin 发 comment 都要填 code!我用的是 wordpress1.5.1.1,在 wp-comment-post.php 中加上 !$user_ID 才解决

  5. 5 william 留言:

    bingu:

    我文章裡面加的那段程式碼,是放在「if($user_ID):else: …」的 else 位置;因此,已經隱含了你所說的「! $user_ID」意思在內。

    至少我從 WordPress 1.5 → 1.5.1 → 1.5.1.1 一路過來都沒問題。

  6. 6 Li-Jie Cheng’s Blog… » Captcha? 好詭異的單字... 引用:

    [...] 好像有用, 可是又覺得好像沒差 XD 關於 captcha 可以看這 William’s Blog 的這篇 [...]

  7. 7 Human World Like A Dream » ﹝9/19 Update!﹞【Blog】進度報告與各項功能介紹 引用:

    [...] ◎ Trencaspammers 留言查核碼 ~ 防堵垃圾回應的『驗證碼』     這是在 William’s Blog 看到的外掛插件,我覺得很好用,於是就下載上傳到我的WP外掛空間裡囉! [...]

  8. 8 sirius 留言:

    請問一下..
    我的圖就是秀不出來
    但我的 GD 正常喔, plugin 也啟動了
    不知道還有可能是什麼錯誤?
    可否指點一下
    謝謝

  9. 9 書比價開發日誌 » 新增”書立得書店”搜尋 引用:

    [...] 這麼做有什麼意義呢?這樣一來,如果有人想要引用這本書的網址,它就不需要先用書名查詢,再複製貼上網址。對於像書籍比價這種程式而言,更可以簡化彼此的負荷。為什麼說是彼此呢?因為不管書店把網址做得多麼複雜,只要不是查詢一本書還需要打個 captcha 來證明你是人不是電腦,電腦一定可以查得出來,書店耗費在增加資訊流通的門檻的成本,其實是一點也不划算的。所以,我們也可以看到 Amazon 就採取了開放的態度:如果你要找一本書,只要在 http://www.amazon.com/exec/obidos/ISBN= 後面加上書的 ISBN 就可以了;如果要找書的封面,那同樣的在 http://images.amazon.com/images/P/ 後面接上 ISBN 。 [...]

  10. 10 Tina 留言:

    感覺起來還蠻好玩的.我以前在申請帳號的時候.常常覺得奇怪為啥要輸入那些數字.現在知道後.就覺得這個構想還真是重要

  11. 11 黃柏榮 留言:

    現在captcha很常見
    很多網站在讓人註冊或下載時都有用captcha
    防止人家用註冊程式大量註冊

  12. 12 紀恩 留言:

    其實,由這種東西的產生可以發現,人類還是有許多能力,是電腦所不能取代。對比較差的網站,破解的方式可以直接從封包著手,會很容易就結束了。這樣子,算再多雜訊的圖片,大概也是白費了吧!

  13. 13 游弘毅 留言:

    這算是還不錯吧\r
    以防有機器人註冊這種事
    會刷爆伺服器..-.-

  14. 14 william 留言:

    有 captcha 把關的網站,正常情況下,是無法從封包去破解的。

    若該系統本來就有 buffer overflow 之類的 exploit 漏洞,那就另當別論了。不過這並不能怪 captcha 能力不足。

  15. 15 94200292 留言:

    非常好的IDEAL
    藉由這個方法保護一般民眾\r
    也使垃圾郵件不那麼多
    簡單的說\r
    將數字微微變形\r
    駭客的軟體沒法破解
    自然就不會受到迫害\r
    非常非常贊成使用\r
    因為信箱總是有很多垃圾信件\r
    也常聽說有人帳號被盜
    所以終於知道這個完一叫啥\r
    有個了解\r
    “Captcha”

  16. 16 94201473 留言:

    原來是有這樣的功用阿\r
    以前我在網上註冊會員或是下載東西
    常常會出現這類的圖樣\r
    我還嫌他多此一舉ㄟ

    有人為了防止駭客擷取資料
    而發明這樣的東西
    不過我想不久後也會有人破解的了吧

  17. 17 孫小毛 留言:

    94200336孫詩怡\r

    原來這號東西就叫做逮到你啦\r
    哈哈真是稀奇的東西
    不過有些網站未免也扭曲的太利害的唄!
    根本是鬼畫符看不懂嘛

  18. 18 94200452 留言:

    人和電腦就是不一樣…..

    但有時候認證碼….斜來歪去的讓我猜不出那是啥字…
    這樣的局面就尷尬了吧!!!

  19. 19 賴筱君 留言:

    真是太了不起了!!! 科技始來自於人性

  20. 20 william 留言:

    有點納悶,怎麼這篇文章突然冒出這麼多留言,該不會是學校老師(銘傳?)要你們留言當作業的吧?居然還有學號… :D

  21. 21 b6s (938313) 留言:

    William:
    看來你應該要去銘傳演講一下?XD

  22. 22 DavidLanz 留言:

    Google Captcha的結果,找到了這篇「Captcha:矛與盾的戰爭」的文章,看過後覺得受益良多,思考著「矛」的同時,便心起了實驗的念頭,發現Captcha的保密強壯度與顏色相關性較低,與字型旋轉、字型、大小、位置為相對正比的關係。

    小弟不才,寫了支辨識程式,可將所有以單一字型、純數字的Captcha達辨識率100%
    先向William大大抱歉,因為我也將了您的留言Captcha拿來剖析,並同時針對蕃X藤投票、X鐵訂票的實驗的結果放在我的blog上:
    初嚐矛的滋味

  23. 23 william 留言:

    David 所言甚是,比較強的 captcha 應該都會加上如你所說的:字型旋轉、字型、大小、位置等花招。

    本站用的 Trencaspammers 其實功能並不強,不過我暫時還沒打算換。如果哪一天發現 spam 過多,我再考慮改用更強的 AuthImage 吧。

  24. 24 Wordpress Plugin Center - PregSpam - Captcha || William s Blog 引用:

    [...] Captcha || William s Blog Trencaspammers William s Blog [...]

留言回應

[檢核碼]  


Allowed XHTML tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

本站已啟用 spam 防護機制。為避免系統誤判,請在按下按鈕之前,先備份您的留言,以防不測。如果您一直無法順利留言,請改用 email 方式。
此外,如果您想留的言與本篇文章及討論串無關,也請轉而點選這裡。謝謝您!