[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 喔,避免重新整理造成多次留言 ‘; ?>

See also