Captcha:矛與盾的戰爭
2005 年 三月 18 日 (星期五) 8:32 pm分類:電腦
標籤:blog, wordpress
“Captcha”,很奇怪的字眼是吧?它是個很有趣的玩意兒,是攻守激烈的電腦戰場。如果你有在玩 MSN Messenger,或是常常註冊帳號,你可能早就遇過它,只是你不知道它叫 “captcha”。
譬如說,當我們想使用 MSN Messenger,微軟會要我們先申請一個 .NET Passport 帳號。你會發現,除了正常的基本資料之外,它還會要我們輸入一串怪怪的字:
![[.NET Passport 的例子]](/pic-blog/captcha-ms.png)
這簡直是整人嘛!歪七扭八的,視力差一點的人,可能根本就看不懂它在寫什麼。怎麼繼續註冊呀?
不只微軟的註冊程序這麼整人,就連國內知名的程式設計網站 Java 技術論壇也有如此的登入畫面,所幸沒有太歪七扭八的折磨人:
![[JavaWorld 的例子]](/pic-blog/captcha-java.png)
這是怎麼一回事呢?請看微軟怎麼說:
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 上,你可以試試以下這兩套外掛:Trencaspammers、AuthImage(如果你用的是其他的 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?
怎麼樣?試成功了嗎?


追蹤留言回應:以
引用通告 (trackback):![[add to funP]](http://william.cswiz.org/blog/wp-content/themes/william/images/add-funp.png)
![[add to HEMiDEMi]](http://www.hemidemi.com/sticker/user/roxytom.bluecircus.net.gif)
![[add to udn bookmark]](http://bookmark.udn.com/html/help/80_20_02.gif)

2005 年 四月 29日 於 1:17 am
文章被 http://cstku.why3s.org/index.php?p=367 全文拷貝過去,又沒留下出處。因此,在該處留言道:
2005 年 四月 30日 於 3:50 pm
以後你應該還會出一篇來評判目前網路上盜用文章的情況吧 ^^;
(按照你的習慣. 應該早就寫好了)
2005 年 五月 1日 於 4:26 pm
抱歉我已經將文章出處寫上~~
2005 年 五月 25日 於 12:57 pm
admin 发 comment 都要填 code!我用的是 wordpress1.5.1.1,在 wp-comment-post.php 中加上 !$user_ID 才解决
2005 年 五月 25日 於 1:19 pm
bingu:
我文章裡面加的那段程式碼,是放在「
if($user_ID):…else:…」的else位置;因此,已經隱含了你所說的「! $user_ID」意思在內。至少我從 WordPress 1.5 → 1.5.1 → 1.5.1.1 一路過來都沒問題。
2005 年 六月 20日 於 1:56 am
[...] 好像有用, 可是又覺得好像沒差 XD 關於 captcha 可以看這 William’s Blog 的這篇 [...]
2005 年 九月 19日 於 1:01 am
[...] ◎ Trencaspammers 留言查核碼 ~ 防堵垃圾回應的『驗證碼』 這是在 William’s Blog 看到的外掛插件,我覺得很好用,於是就下載上傳到我的WP外掛空間裡囉! [...]
2005 年 十一月 13日 於 3:43 am
請問一下..
我的圖就是秀不出來
但我的 GD 正常喔, plugin 也啟動了
不知道還有可能是什麼錯誤?
可否指點一下
謝謝
2005 年 十一月 14日 於 1:43 pm
[...] 這麼做有什麼意義呢?這樣一來,如果有人想要引用這本書的網址,它就不需要先用書名查詢,再複製貼上網址。對於像書籍比價這種程式而言,更可以簡化彼此的負荷。為什麼說是彼此呢?因為不管書店把網址做得多麼複雜,只要不是查詢一本書還需要打個 captcha 來證明你是人不是電腦,電腦一定可以查得出來,書店耗費在增加資訊流通的門檻的成本,其實是一點也不划算的。所以,我們也可以看到 Amazon 就採取了開放的態度:如果你要找一本書,只要在 http://www.amazon.com/exec/obidos/ISBN= 後面加上書的 ISBN 就可以了;如果要找書的封面,那同樣的在 http://images.amazon.com/images/P/ 後面接上 ISBN 。 [...]
2006 年 五月 25日 於 9:58 am
感覺起來還蠻好玩的.我以前在申請帳號的時候.常常覺得奇怪為啥要輸入那些數字.現在知道後.就覺得這個構想還真是重要
2006 年 五月 25日 於 10:00 am
現在captcha很常見
很多網站在讓人註冊或下載時都有用captcha
防止人家用註冊程式大量註冊
2006 年 五月 25日 於 10:05 am
其實,由這種東西的產生可以發現,人類還是有許多能力,是電腦所不能取代。對比較差的網站,破解的方式可以直接從封包著手,會很容易就結束了。這樣子,算再多雜訊的圖片,大概也是白費了吧!
2006 年 五月 25日 於 10:57 am
這算是還不錯吧\r
以防有機器人註冊這種事
會刷爆伺服器..-.-
2006 年 五月 25日 於 11:15 am
有 captcha 把關的網站,正常情況下,是無法從封包去破解的。
若該系統本來就有 buffer overflow 之類的 exploit 漏洞,那就另當別論了。不過這並不能怪 captcha 能力不足。
2006 年 五月 26日 於 9:47 am
非常好的IDEAL
藉由這個方法保護一般民眾\r
也使垃圾郵件不那麼多
簡單的說\r
將數字微微變形\r
駭客的軟體沒法破解
自然就不會受到迫害\r
非常非常贊成使用\r
因為信箱總是有很多垃圾信件\r
也常聽說有人帳號被盜
所以終於知道這個完一叫啥\r
有個了解\r
“Captcha”
2006 年 五月 26日 於 9:54 am
原來是有這樣的功用阿\r
以前我在網上註冊會員或是下載東西
常常會出現這類的圖樣\r
我還嫌他多此一舉ㄟ
有人為了防止駭客擷取資料
而發明這樣的東西
不過我想不久後也會有人破解的了吧
2006 年 五月 26日 於 9:58 am
94200336孫詩怡\r
原來這號東西就叫做逮到你啦\r
哈哈真是稀奇的東西
不過有些網站未免也扭曲的太利害的唄!
根本是鬼畫符看不懂嘛
2006 年 五月 26日 於 9:59 am
人和電腦就是不一樣…..
但有時候認證碼….斜來歪去的讓我猜不出那是啥字…
這樣的局面就尷尬了吧!!!
2006 年 五月 26日 於 11:42 am
真是太了不起了!!! 科技始來自於人性
2006 年 五月 26日 於 3:06 pm
有點納悶,怎麼這篇文章突然冒出這麼多留言,該不會是學校老師(銘傳?)要你們留言當作業的吧?居然還有學號…
2006 年 五月 26日 於 6:55 pm
William:
看來你應該要去銘傳演講一下?XD
2006 年 十月 14日 於 2:31 pm
Google Captcha的結果,找到了這篇「Captcha:矛與盾的戰爭」的文章,看過後覺得受益良多,思考著「矛」的同時,便心起了實驗的念頭,發現Captcha的保密強壯度與顏色相關性較低,與字型旋轉、字型、大小、位置為相對正比的關係。
小弟不才,寫了支辨識程式,可將所有以單一字型、純數字的Captcha達辨識率100%
先向William大大抱歉,因為我也將了您的留言Captcha拿來剖析,並同時針對蕃X藤投票、X鐵訂票的實驗的結果放在我的blog上:
初嚐矛的滋味
2006 年 十月 14日 於 3:49 pm
David 所言甚是,比較強的 captcha 應該都會加上如你所說的:字型旋轉、字型、大小、位置等花招。
本站用的 Trencaspammers 其實功能並不強,不過我暫時還沒打算換。如果哪一天發現 spam 過多,我再考慮改用更強的 AuthImage 吧。
2008 年 九月 3日 於 8:39 am
[...] Captcha || William s Blog Trencaspammers William s Blog [...]