Posted by: hick 2006-05-13 21:42 |
前言 ==================================================
嘿嘿,以前想過 n 次,怎么讓驗證碼脫離 gd/其他圖形庫 等。曾經(jīng)發(fā)現(xiàn)有人使用簡單的 問題和答案匹配的方法,比如“1 加 2 等于幾”,確實比較有意思,雖然咋看起來可能毛病多多,但是做得比較好的話完全可以擺脫 gd 庫。
具體方案 ==================================================
aDang 同學(xué)在 http://club./index.php?s=&act=ST&f=15&t=13164&st=0 提到一個 隨機賬號 的做法,突然受到啟發(fā):
1. 先準備 所有字母數(shù)字的 62 張不容易被分析出來的圖片, 要不干脆簡單點 10 張數(shù)字的圖片吧。 2. 按一定的映射關(guān)系,重命名所有圖片文件,比如 0.gif => 1, 2.gif => 9 .... 并把這個映射關(guān)系保存下來,給用戶顯示驗證碼的時候直接調(diào)用圖片組合,嘿嘿,怎么驗證不用多說了吧... 3. 然后要做的,就是按照一定的時間周期,重新生成映射關(guān)系,以防止映射關(guān)系被人猜到。
優(yōu)缺點 ==================================================
優(yōu)點 ---------------------------------------------
1. 不需要 gd 庫或者其他的圖片處理 2. 不依賴 session 等,可以通過隱藏 input 標記顯示的驗證碼圖片集
缺點 ---------------------------------------------
歡迎大家挑刺 嘿嘿?,F(xiàn)在我能夠想到的問題有
1. 切換映射關(guān)系的時候部分用戶的驗證碼可能會被“誤解”。所以切換的頻率不能夠太快,一般一天一次差不多吧 2. 如果人工識別,比較容易識別出映射關(guān)系,增加圖片張數(shù)可以提高識別難度。 3. 如果人工識別一個驗證碼, browser 可以在映射關(guān)系改變之前一直利用這個驗證碼。可以在給用戶的驗證碼提交表單form里,把隱藏 input 的值設(shè)置為 UNIX 時間戳(或稍微加一點算法),作為顯示驗證碼圖片的依據(jù),一個附帶的好處就是可以規(guī)定驗證碼的有效時間。
后注:剛才發(fā)現(xiàn)忘記了英文字母個數(shù)是 26 個還是 24 個了,哈哈。 |
Posted by: cid73 2006-05-13 22:23 |
防止圖片驗證碼被識別主要還是要防 ocr 吧? 你也沒必要搞什么映射, 給用戶一個 session, 搞些隨機映射比如 ‘a(chǎn)‘ => ‘23hhg‘, ‘x‘ => ‘ufh0d‘ 這樣, 圖片地址也用這些隨機碼, 用這個 session 去校驗用戶提交的字符串, 這樣更方便. |
Posted by: cid73 2006-05-13 22:27 |
關(guān)于防止 ocr 我想過一招, 用你那樣的靜態(tài)圖片, 但是把圖片切成小塊例如 4 塊, 用表格把它們組合起來, 這樣人眼看起來是一張完整的圖片, 而 ocr 軟件一看, 我暈, 只是一個字的四分之一 |
Posted by: hick 2006-05-13 22:40 |
QUOTE (cid73 @ 2006-05-13 22:23) |
防止圖片驗證碼被識別主要還是要防 ocr 吧? 你也沒必要搞什么映射, 給用戶一個 session, 搞些隨機映射比如 ‘a(chǎn)‘ => ‘23hhg‘, ‘x‘ => ‘ufh0d‘ 這樣, 圖片地址也用這些隨機碼, 用這個 session 去校驗用戶提交的字符串, 這樣更方便. |
映射有兩個目的:
1. 服務(wù)器可以很方便的獲知顯示給用戶的驗證碼有哪幾個文件,不用根據(jù) session 或者其他東西來確認圖片顯示的字符。我寫程序的原則是能夠不用 session ,就不用。對一般的 blog 很有用,我自己正構(gòu)思一個靜態(tài)化的 blog,更不好弄 session 了。
2. 隨時變更映射,可以防止人工識別出來映射關(guān)系以后,驗證碼就失效了。我還沒見過有人拿經(jīng)過簡單映射關(guān)系的圖片當(dāng)驗證碼糊弄人,嘿嘿,直接顯示數(shù)字文本的笨蛋倒是見過。。。 |
Posted by: james.liu 2006-05-13 22:42 |
QUOTE (cid73 @ 2006-05-13 22:27) |
關(guān)于防止 ocr 我想過一招, 用你那樣的靜態(tài)圖片, 但是把圖片切成小塊例如 4 塊, 用表格把它們組合起來, 這樣人眼看起來是一張完整的圖片, 而 ocr 軟件一看, 我暈, 只是一個字的四分之一 |
這個主意8錯...
|
Posted by: hick 2006-05-13 22:47 |
QUOTE (cid73 @ 2006-05-13 22:27) |
關(guān)于防止 ocr 我想過一招, 用你那樣的靜態(tài)圖片, 但是把圖片切成小塊例如 4 塊, 用表格把它們組合起來, 這樣人眼看起來是一張完整的圖片, 而 ocr 軟件一看, 我暈, 只是一個字的四分之一 |
嘿嘿,某人怎么又刪帖了。。。
防 ocr, 象 MS 做得比較絕,我對他們那種做法都十分反感, nnd,別說 ocr 了,我過去了有些也識別不出來
其實防 ocr 應(yīng)該比較簡單,常見的是加入隨機的點線等。 退一步說,只要是規(guī)則的圖片,都可以被 OCR 識別,所以只有產(chǎn)生隨機的干擾色了。以前就有人把 CU 的識別碼用 php 給破了不是 嘿嘿 當(dāng)然主要是因為那個驗證碼一點干擾色都沒有... |
Posted by: legend 2006-05-13 22:58 |
不需要GD庫也可以生成圖片啊,比如說生成bmp的就比較簡單,文件頭及信息頭固定,然后把點陣寫進去就是了。
圖片驗證碼現(xiàn)在搞得越來越BT,人眼都很難識別。我看以后有朝聲音驗證碼的趨勢發(fā)展了。 |
Posted by: hick 2006-05-13 23:03 |
QUOTE (legend @ 2006-05-13 22:58) |
不需要GD庫也可以生成圖片啊,比如說生成bmp的就比較簡單,文件頭及信息頭固定,然后把點陣寫進去就是了。
圖片驗證碼現(xiàn)在搞得越來越BT,人眼都很難識別。我看以后有朝聲音驗證碼的趨勢發(fā)展了。 |
沒注意,以前好象誰在這里貼過? 不是你貼吧?
我大概看了一下,記得好象用到了什么特殊的函數(shù)生成的 bmp 圖片?
忘記在什么地方都已經(jīng)看到有聲音驗證碼了,嘿嘿,而且巨 bt,說了一大段英文,我聽了三遍楞沒聽出來...
|
Posted by: james.liu 2006-05-13 23:07 |
QUOTE (hick @ 2006-05-13 23:03) |
QUOTE (legend @ 2006-05-13 22:58) |
不需要GD庫也可以生成圖片啊,比如說生成bmp的就比較簡單,文件頭及信息頭固定,然后把點陣寫進去就是了。
圖片驗證碼現(xiàn)在搞得越來越BT,人眼都很難識別。我看以后有朝聲音驗證碼的趨勢發(fā)展了。 |
沒注意,以前好象誰在這里貼過? 不是你貼吧?
我大概看了一下,記得好象用到了什么特殊的函數(shù)生成的 bmp 圖片?
忘記在什么地方都已經(jīng)看到有聲音驗證碼了,嘿嘿,而且巨 bt,說了一大段英文,我聽了三遍楞沒聽出來... |
具8可靠信息
為了避免出現(xiàn)聽8懂得英文讀音,中國政府決定派出008jl來完成。
到時候大家都有耳福拉 |
Posted by: legend 2006-05-13 23:14 |
QUOTE (hick @ 2006-05-13 23:03) |
沒注意,以前好象誰在這里貼過? 不是你貼吧?
我大概看了一下,記得好象用到了什么特殊的函數(shù)生成的 bmp 圖片?
忘記在什么地方都已經(jīng)看到有聲音驗證碼了,嘿嘿,而且巨 bt,說了一大段英文,我聽了三遍楞沒聽出來... |
不是我貼的,我是在搞imagebmp的時候,了解到生成bmp格式的驗證碼圖片非常簡單,定好文件頭跟信息頭,然后直接往里寫數(shù)字或字母的點陣數(shù)據(jù)就可以了。
passport的注冊就有圖片驗證碼跟聲音驗證碼兩種選擇。 |
Posted by: hick 2006-05-13 23:22 |
to legend
baidu 一搜 imagebmp 就到了你 blog 上 
http://www./wp-data/imagebmp.php 上的代碼是嗎? 里面好象用到了需要 gd 庫的函數(shù),比如 imagetruecolortopalette(這個函數(shù)名也起得夠次的 sigh) |
Posted by: legend 2006-05-13 23:25 |
QUOTE (hick @ 2006-05-13 23:22) |
to legend
baidu 一搜 imagebmp 就到了你 blog 上 
http://www./wp-data/imagebmp.php 上的代碼是嗎? 里面好象用到了需要 gd 庫的函數(shù),比如 imagetruecolortopalette(這個函數(shù)名也起得夠次的 sigh) |
我寫的那個imagebmp是需要gd,因為需要讀取其他格式的圖片。
如果單純驗證碼圖片的話,因為點陣數(shù)據(jù)比較簡單,顏色也不需要太復(fù)雜,直接寫就可以了。 |
Posted by: cid73 2006-05-13 23:28 |
QUOTE (legend @ 2006-05-13 22:58) |
不需要GD庫也可以生成圖片啊,比如說生成bmp的就比較簡單,文件頭及信息頭固定,然后把點陣寫進去就是了。
圖片驗證碼現(xiàn)在搞得越來越BT,人眼都很難識別。我看以后有朝聲音驗證碼的趨勢發(fā)展了。 |
那你覺得我的方法如何? 只用非常干凈的圖片, 用不著那些花里胡哨的東東. 切割的話可以中央對折, 正十字, 九宮格, 還可以鏤空, 用層合起來. 鏤空的方法就更多了, 比如象瑞士國旗那樣刻出一個十字在中央, 或者星型放射之類, 還可以隨機組合, 第一張是米老鼠, 第二張小飛機...玩死 ocr, 呵呵 |
Posted by: legend 2006-05-13 23:33 |
QUOTE (cid73 @ 2006-05-13 23:28) |
QUOTE (legend @ 2006-05-13 22:58) |
不需要GD庫也可以生成圖片啊,比如說生成bmp的就比較簡單,文件頭及信息頭固定,然后把點陣寫進去就是了。
圖片驗證碼現(xiàn)在搞得越來越BT,人眼都很難識別。我看以后有朝聲音驗證碼的趨勢發(fā)展了。 |
那你覺得我的方法如何? 只用非常干凈的圖片, 用不著那些花里胡哨的東東. 切割的話可以中央對折, 正十字, 九宮格, 還可以鏤空, 用層合起來. 鏤空的方法就更多了, 比如象瑞士國旗那樣刻出一個十字在中央, 或者星型放射之類, 還可以隨機組合, 第一張是米老鼠, 第二張小飛機...玩死 ocr, 呵呵 |
暫時想象不出來會是個什么樣子 |
Posted by: wangchun 2006-05-14 12:10 |
你們的思維都怎么了,放著GD庫不用,現(xiàn)在我還沒見過不支持GD庫的空間,樓主的方法也太土了,其實很簡單的 $_SESSION[‘randcode‘] = array(‘1‘,‘a(chǎn)aaa‘); 第一個是圖片ID,第二個是上面的文字
randcode.php 中,直接header文件頭,readfile($_SESSION[‘randcode‘][0]."gif");不就行了。當(dāng)然如果遇到知道你算法的人就沒用了,文件對比就出來了
判斷的時候 if($_POST[‘randcode‘] == $_SESSION[‘randcode‘][1]){}
|
Posted by: hick 2006-05-14 12:22 |
暈...
看清楚了再發(fā)表意見...
1. gd 庫不是每個人都有條件使用的,比如現(xiàn)在眾多的 blog。另外圖片處理即使很簡單,需要消耗的資源不是一般的多。。標題就說了擺脫 gd,如果你認為不需要擺脫,那另當(dāng)別論。
2. 又拿 session 說事,不是我吝惜,如果你的網(wǎng)站做得夠大, session 會很是個問題!
3. 嘿嘿,我也“激”一把,你的方法確實太土了。 |
Posted by: bleakwind 2006-05-14 12:30 |
session就像變量一樣是個必備的功能啊!因為最起碼你會員登陸,后臺登陸驗證都要session,不用session驗證的程序在我印象里不是好程序...
驗證碼不用session我也覺得不是很保險... |
Posted by: trooman 2006-05-14 14:40 |
看過asp寫的,那“點陣”夠BT,再出奇一點,可以搞個人體點陣,還有欣賞價值! |
Posted by: bleakwind 2006-05-14 15:50 |
PHP也有人寫點陣的東西,那時候freetype還不流行所以就整出來了。。。
不過字體有點看著別扭 |
Posted by: hick 2006-05-14 20:50 |
QUOTE (bleakwind @ 2006-05-14 12:30) |
session就像變量一樣是個必備的功能啊!因為最起碼你會員登陸,后臺登陸驗證都要session,不用session驗證的程序在我印象里不是好程序...
驗證碼不用session我也覺得不是很保險... |
驗證碼不通過 sessin 實現(xiàn)不是說不用 session 進行登錄驗證。
1. 在登錄的時候,不需要 session --- 當(dāng)然這個開支比較小 2. 很多論壇還有 blog 都是在查看的時候,不管你是否會真的回復(fù),都會顯示回復(fù)框以及驗證碼,實際上這個也沒必要用 session,這時候的 session 有時候顯得多余,并且這樣的頁面訪問量跟登錄不是一個數(shù)量級! 3. 雖然像我這樣成天惦記靜態(tài)化的人不多,但是不用 session 確實給靜態(tài)化頁面提示驗證碼帶來便利。 |
Posted by: superspice 2006-05-14 22:03 |
呵呵。被回復(fù)機器人搞怕了你。 |
Posted by: hick 2006-05-14 22:27 |
QUOTE (superspice @ 2006-05-14 22:03) |
呵呵。被回復(fù)機器人搞怕了你。 |
那確實,嘿嘿...
不只是我,現(xiàn)在 WP 等流行程序,還有一些簡單的留言板,充斥著各種 junk robot |
Posted by: axgle 2006-05-14 22:54 |
我的站點沒有呢.我盼望著她們的到來--預(yù)先已做好了圖片驗證,呵呵 |
Posted by: superspice 2006-05-14 22:56 |
樓主有空做一個comment spammer吧。 期待,呵呵 |
Powered by Invision Power Board (http://www.) © 2002 Invision Power Services (http://www.)
|