การป้องกันการสแปมที่ได้รับความนิยมในปัจจุบันเห็นทีจะต้องยกให้ CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) ซึ่งจะเป็นการให้ผู้ใช้ (user) กรอกรหัสที่แสดงเป็นรูปภาพ เช่น
ทำความรู้จักกันแล้วก็มาเข้าเรื่องกันเลยดีกว่าครับ บทความนี้จะพูดถึงวิธีการใช้งาน Captcha Helper ของ CI (Codeigniter) ซึ่งขั้นตอนการใช้งานก็มีดังนี้ครับ
1. สร้างเทเบิล (Table) ชื่อ captcha โดยมีโครงสร้างดังนี้ครับ
CREATE TABLE captcha ( captcha_id bigint(13) unsigned NOT NULL auto_increment, captcha_time int(10) unsigned NOT NULL, ip_address varchar(16) default '0' NOT NULL, word varchar(20) NOT NULL, PRIMARY KEY `captcha_id` (`captcha_id`), KEY `word` (`word`) );
2. สร้างโฟลเดอร์ captcha สร้างไว้ที่ Document root และกำหนด permission เป็น 666 หรือ 777
/ /application /system /captcha
3. ตัวอย่างการใช้งาน
$this->load->helper('captcha'); $vals = array( 'img_path' => './captcha/', 'img_url' => 'http://example.com/captcha/' ); $cap = create_captcha($vals); $data = array( 'captcha_time' => $cap['time'], 'ip_address' => $this->input->ip_address(), 'word' => $cap['word'] ); $query = $this->db->insert_string('captcha', $data); $this->db->query($query); echo 'พิมพ์ตัวอักษรที่เห็นในรูปด้านล่าง: '; echo $cap['image']; echo '<input type="text" name="captcha" value="" />';
จากนั้นที่หน้าที่เรา submit form ไปก็ทำการตรวจสอบค่าดังนี้ครับ
// First, delete old captchas $expiration = time()-7200; // Two hour limit $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration); // Then see if a captcha exists: $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?"; $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration); $query = $this->db->query($sql, $binds); $row = $query->row(); if ($row->count == 0) //ถ้าหากผลการค้นหามีค่ามากกว่า 0 แสดงว่าผู้ใช้พิมพ์อักษรถูกต้องครับ { echo "พิมพ์ตัวอักษรไม่ถูกต้อง"; }
เท่านี้ก็เรียบร้อยครับ ซึ้งถ้าหากเพื่อนๆ ต้องการกำหนดรูปแบบของตัวอักษรหรือตั้งค่าอื่นเพิ่มเติมก็สามารถเข้าไปศึกษาข้อมูลต่อได้ที่นี่เลยครับ