2013年8月9日 星期五

php 圖形驗證碼,正確構思

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

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

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

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

範例檔案,請下載【 sample003.zip 】這個檔案


drive.googleonedrive.liveasuswebstoragesync.hamicloud.net


7-zip 解壓後,再用 notepad++ 之類的文字處理軟體開啟即可

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




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




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





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

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

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





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




上圖修改後的範例文件,請下載【 sample004.zip 】這個檔案


drive.googleonedrive.liveasuswebstoragesync.hamicloud.net


7-zip 解壓後,再用 notepad++ 之類的文字處理軟體開啟即可

最後,提醒一下,如果要參考或拿來使用,請使用【 sample004.zip 】內的方式


關聯文章 → Google reCAPTCHA Challenge 驗證盤問之 keys 申請說明


關聯文章 → reCAPTCHA 範例解說:使用 reCAPTCHA V2 類型【圖文教學】


關聯文章 → reCAPTCHA 範例解說:使用 Invisible reCAPTCHA 類型【圖文教學】


Thank you for reading

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. .

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

      .

      刪除

留言後,需等待,站長的查看,才會公開,請勿重複留言,謝謝