2013年8月9日 星期五

php 圖形驗證碼,正確構思

php 圖形 驗證碼 圖片 驗証碼 image verify code

圖形驗證碼有很多地方都用的到,註冊、申請、登入、發文、回覆 ● ● ● 等頁面,主要是用來防堵暴力取得帳密【盜號】,還有防治發廣告機。

圖片是不能copy裡面的英文數字,也不像html或js代碼那樣,可以用一定的方式來反譯及破解,只需要將圖片內容加上浮動效果及些許干擾碼,這樣要解析圖片內的東西就非常不易了。

有些網站貪圖方便,註冊及登入頁沒圖形驗證碼,其實很抖,密碼都要設到12元以上,還頗為麻煩,畢竟不是發文,註冊及登入算一次性作業,如果你是站長,建議可以用一下圖形驗證碼。

範例檔案,請下載 sample003.zip 這個file:

drive.googleonedrive.live【下載教學】

zip解壓後,用 notepad++ 之類的文字處理軟體開啓即可。

這是個簡單的php圖形驗證碼,隨機抓6個英文字小寫,後將值放到session存放,並生成圖片顯示於提交頁。



按下提交後,post和session這2個值,如果一樣,就ok通過。



避免被瀏覽器解析,代碼用成圖片:





我想大家在網上找,php驗證碼code時,不少範例都是上述這樣寫法,我指的是構思方面,不是指內容部份,有看出什麼缺點嗎?

這樣的寫法,很容易失效,而且不用圖形解析,就會被暴力灌水機突破,為何呢?

因為用來產生隨機值的部份是在圖片生成php內,那些灌水機只要攻擊用來檢查session與post值的php就好,不去執行圖片生成php,session內的值就不會改變,只要循序匹配,早晚會通過。

正確的寫法,應該是檢查值與隨機產生值的部份,寫在同一個php文件內,只要匹配錯誤就重刷比對值,而生成圖片的php文件,只單純抓值顯示,這樣才ok。



上圖修改後的範例文件,請下載 sample004.zip 這個file:

drive.googleonedrive.live【下載教學】

zip解壓後,用 notepad++ 之類的文字處理軟體開啓即可。

如果要參考或拿來使用,請使用 sample004.zip 內的方式。

大略說明就先這樣了,如大家有什麼要補充的,可在此回覆及討論。


其他參考文章 → 教你如何使用google的reCAPTCHA驗證碼


9 則留言:

  1. sample004.zip 的檔案在哪裡可以下載到。

    回覆刪除
    回覆
    1. .

      詳細看一下連結,裡面有附上 sample004.zip

      .

      刪除
  2. 請問一下 我把004的檔案拿來用 有改名成code 結果

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\index.php:8) in C:\AppServ\www\code.php on line 5

    是 判斷session是否已啟 這段 放上網路上這段一直出現錯誤字樣

    我該怎樣修改呢? 請求大大幫忙

    回覆刪除
  3. .

    編輯軟體請使用notepad++,不要用記事本
    http://zfly9.blogspot.tw/2013/02/notepad.html

    編輯網頁代碼要特別留意,不然會含到BOM標籤,開頭會輸出2字元,session前面不能有任何網頁輸出,那段錯誤是說,已經有東西輸出了

    程式不要動,把sample004目錄改為004,後127.0.0.1/004/執行看看

    .

    回覆刪除
  4. .

    那個BOM標籤看不見,是給文件判斷是否為utf8用的,編寫網頁代碼不需要這東西

    現今網頁主流都是utf8格式,notepad++內,有教如何轉成utf8不含bom

    utf8不含bom的文件,不用轉,notepad++右下就可以看什麼格式

    .

    回覆刪除
  5. 請教一下, 我檔案都沒有修改直接放到 www root 下, 但圖形驗証碼沒圖片顯示不出來是何原因? 謝謝

    回覆刪除
    回覆
    1. .

      沒GP庫,或session設置出錯,你下載php探針,看看環境
      http://zfly9.blogspot.tw/2009/08/phpinfos.html

      見下圖那2項
      http://i.imgur.com/c27CW7M.png

      .

      刪除
  6. 版大您好:
    我下載sample004.zip,有出現圖片,但是我還沒有輸入驗證碼,或是輸入錯誤的驗證碼,也可以送出
    需要加入什麼語法嗎?
    謝謝指教!

    回覆刪除
    回覆
    1. .

      沒有輸入驗證碼,或輸入錯誤的驗證碼,也可以送出,只是不會通過,一直在驗證頁

      .

      刪除