[PHP] 好用的留言板 驗證碼 功能

這算是大家都知道的技術了吧,因為說實在的,留言板惡意灌水實在是太容易了,就算是檔檔 referer 也是沒用,因為表頭可以自己偽造,那最好的方法就是用 PHP 驗證碼的機制,這個機制利用 GD 縮圖的部份,然後再把驗證數字存放在 SESSION 裡面,不過 PHPBB 的作法是存在 database 資料庫裡面進行比對,然後在 delete 該比資料,畢竟每個連線都有自己的 ssid 的值,所以這樣進行比對,我想是不錯的方法,也可以用在很多地方,那底下是我去 Jax 的工作紀錄 看到的一篇:PHP 驗證碼,拿過來筆記一下。 首先先去 Windows 底下的 Fonts 資料夾,選一個字型吧,因為裡面會用到喔,不然底下這一段 code 會用到
imagettftext($im, 20, 0, 25, 35, $Color,"arial.ttf",$verification__session);
/*
imagettftext (int im, int size, int angle,
int x, int y, int col,
string fontfile, string text)
im 圖片物件
size 文字大小
angle 0度將會由左到右讀取文字,而更高的值表示逆時鐘旋轉
x y 文字起始座標
col 顏色物件
fontfile 字形路徑,為主機實體目錄的絕對路徑,
可自行設定想要的字型
text 寫入的文字字串
*/
其他的就是底下這段程式碼,把他存成 image.php

然後再利用
顯示出來就可以了喔,然後傳到 POST 頁面做判斷:
if($_SESSION["verification__session"] != $_REQUEST["image"])
  exit("嚴禁惡意的攻擊行為");
else
  unset($_SESSION["verification__session"]);
這樣就完成,記得要 unset 喔,避免重新整理造成多次留言 ‘; ?>
  • Pingback: [PHP]製作類似 google 網頁認證碼 | 小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY()

  • 大大 在網路上找好久找到了您這篇認證碼的教學 但是小弟我剛在學習
    —>是不是該在這裡有使用者輸入認證碼的地方?
    顯示出來就可以了喔,然後傳到 POST 頁面做判斷:

    —>是不是在這在與使用者輸入的認證碼做檢查比對?
    if($_SESSION[“verification__session”] != $_REQUEST[“image”])
    exit(“嚴禁惡意的攻擊行為”);
    else
    unset($_SESSION[“verification__session”]);

    對不起擔誤您的時間 煩請大大為小弟解答一下吧^^||

  • [cc lang=”php”]
    if($_SESSION[“verification__session”] != $_REQUEST[“image”])
    exit(”嚴禁惡意的攻擊行為”);
    else
    unset($_SESSION[“verification__session”]);
    [/cc]

    上面這一段,是在使用者輸入資料傳送到後端PHP做認證的時候使用喔
    如果比對不成功顯示錯誤,如果成功就 unset $_SESSION[“verification__session”]
    避免使用者重新 refresh
    前端輸出圖形,後端比對輸入資料,就是這樣而已喔

  • 大大感謝您這麼快速的回應
    底下這個部份我把他放在輸入留言的頁面

    那同個頁面是不是應該要增加使用者輸入認證碼的欄位

    然後在送出到比對頁面
    我這個順序對嗎?

    然後我那個這行裡的name是不是該設為image ?與底下大大的這個image是同一個?
    if($_SESSION[“verification__session”] != $_REQUEST[“image”])

    sorry 小弟剛開始學習實在不太懂XD 請大大指導一下^^||

  • 大大感謝您這麼快速的回應
    底下這個部份我把他放在輸入留言的頁面
    ig src=”wp-content/PHP/image.php”
    那同個頁面是不是應該要增加使用者輸入認證碼的欄位
    如input type=………..
    然後在送出到比對頁面
    我這個順序對嗎?

    然後我那個input type….這行裡的name是不是該設為image ?與底下大大的這個image是同一個?
    if($_SESSION[“verification__session”] != $_REQUEST[“image”])

    sorry 小弟剛開始學習實在不太懂XD 請大大指導一下^^||
    抱歉剛有這個的都出不來 所以重填一下

  • 首先你要先確定環境有支援 GD Library,確定之後就可以如下面步驟:
    1. 顯示認證碼

    [cc lang=”html”]

    [/cc]

    這是用來顯示認證圖片
    2. 新增 input 欄位

    [cc lang=”html”]

    [/cc]

    我想妳先學好基本的 form 傳遞資料,這比較重要喔

  • raymond

    大大謝謝您的指導嚕 這樣我就比較確定我想的順序可以執了唷
    剛入手 會加油的^^

  • Pingback: [CodeIgniter] 使用者註冊 auth code 亂數認證碼圖片 | 小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY()

  • 真够专业的!谢谢分享。


  • 不是

    有錯字
    哈哈
    不過你這篇寫的好~~
    要include嗎???

    然後在利用
    顯示出來就可以了喔,然後傳到 POST 頁面做判斷

  • 感謝 佳佳:
    我修正了

  • 阿倫

    大大想請教一下,為何我的驗證碼的圖片都看不到?

  • 小雪

    哥哥安唷╭* 我叫小雪

    目前讀大一 20歲^_^

    我身高165 體重50 三圍:32c 22 33

    最近生活出現困難~需要金錢援助~不想同學和家人知道╭*

    所以我選擇了自己個人出來個人試著找援

    價錢 3500 2小時 單純各取所需.~~配合度100%

    先約地點見面滿意再做ˋ不滿意可以不做

    能幫助我的哥哥加我MSN:erer7374@hotmail.com

    我ㄉ相簿→ http://photo.pchome.com.tw/erer7374

    MSN – 不在線時可以在我部落格留聯絡電話 稱呼 住址 看到會馬上聯絡你.ok

    可以先約見面確定和照片本人無誤我們在交易 事后還可以交朋友

    希望能與哥哥有個美好ㄉ回憶^_^無誠意約ㄉ請勿打擾~謝謝╭☆

  • Lee00011

    一輩子有多長我不知道 緣份有多少我也不寥解  珍惜我倆相遇的緣分及能一起度過的這點點滴滴^.^在人群之中尋覓著你  但願我們還有緣…(┬_┬)但願在這裡能遇見你   即時通:lee0002278@yahoo.comMSN:lee00011@hotmail.com就是在等來約我的你喔    我ㄉ無名:http://www.wretch.cc/album/lee00011(注:非專業  機車  虎亂  勿擾 沒msn的或者我不在線可以到我的相簿留言給我 留下你的電話號碼 我上線
    第一時間跟你聯絡)