……機器人會在網站中搜尋容許他們插入廣告的輸入表單,在虛擬世界沒有什麼能阻擋它們胡做非爲。這些機器人效率極高,徹底不關心所攻擊的表單的原本用途。它們惟一的目標就是用它們的垃圾廣告覆蓋你的內容,殘忍地爲它們的主人謀取廣告收入。php
要檢驗一個表單所面對的是一個真正的人,這種測試稱爲CAPTCHA(徹底自動化公共圖靈測試)。目前最有效的方法是生成一個要求用戶輸入的隨機通行短語,爲了防止支持OCR(光學字符識別)的機器人破解系統,通行短語字母必須變形,或者用隨機的直線和點進行部分模糊處理。瀏覽器
/* 生成驗證碼序列 */ define("CAPTCHA_NUMCHARS", 6); //驗證碼長度 $pass_phrase = ""; //驗證碼內容 for ($i = 0; $i < CAPTCHA_NUMCHARS; $i++) { //隨機生成字母添加至驗證碼 $pass_phrase .= chr(rand(97, 122)); } /* 生成驗證碼圖像 */ define("CAPTCHA_WIDTH", 300); //驗證碼寬度 define("CAPTCHA_HEIGHT", 100); //驗證碼高度 //建立空白畫布 $img = imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT); //設置主題顏色 $bg_color = imagecolorallocate($img, 225, 225, 225); //白色背景 $text_color = imagecolorallocate($img, 0, 0, 0); //黑色字體 $graphic_color = imagecolorallocate($img, 64, 64, 64); //灰色圖像 //填充背景 imagefilledrectangle($img, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, $bg_color); //繪製隨機直線 for ($i = 0; $i < 10; $i++) { imageline($img, 0, rand() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, $graphic_color); } //繪製隨機點 for ($i = 0; $i < 20; $i++) { imagefilledellipse($img, rand() % CAPTCHA_WIDTH, rand() % CAPTCHA_HEIGHT, 10, 10, $graphic_color); } //繪製驗證碼 imagettftext($img, 60, 0, 20, CAPTCHA_HEIGHT - 20, $text_color, "C:/Windows/Fonts/SketchFlow Print.ttf", $pass_phrase); //做爲PNG圖像輸出 header("Content-type: image/png"); imagepng($img); //從內存從撤銷圖像 imagedestroy($img);
使用PHP動態生成的圖像並不存儲在一個文件中,實際上,imagepng() 函數會在服務器的內存中生成一個二進制PNG圖像,而後把它直接經過一個首部傳送到瀏覽器。服務器
正因如此能夠直接把PHP腳本放置在 <img> 標記的 src 屬性中:<img src = "CAPTCHA.php"/>函數