Selasa, 23 September 2008

Penggunaan GD Library pada PHP dengan membuat Security Number

Penggunaan GD Library pada PHP dengan membuat Security Number
Mungkin anda sering mendaftar di web-web, apakah email, friendster, multiply atau lainnya. Nah pada saat anda melakukan pendaftaran terkadang muncul kotak yang di sampingnya ada angka2 random disertai garis atau lainnya. Tentu anda bertanya apa sih gunanya angka2 tersebut ? Tentu saja untuk menanggulangi SPAM. Jika dalam website anda memiliki buku tamu atau sistem komentar yang tidak mengharuskan orang-orang untuk login untuk mengisinya, maka 100% website anda akan kena spam. Apa itu spam? jika anda menerima komentar yang tidak diinginkan pada buku tamu atau sistem komentar anda, maka anda bisa menyebutkan itu sebagai SPAM. Para spammers melakukan SPAM biasanya dengan menggunakan software otomatis (istilah kerennya: bots) yang secara otomatis mengisi form-form yang ada di internet. Nah untuk mencegah software tersebut mengisi form, kita perlu menambahkan sebuah field yang hanya bisa diisi jika pengisinya adalah manusia. Bagaimana caranya? Dengan membuat sebuah angka acak yang ditampilkan sebagai gambar, nah kita diharuskan mengisi angka tersebut. Bagi kita mudah saja untuk mengisi angka, karena kita dapat dengan mudah melihatnya, tapi bagi software otomatis tadi tentu susah untuk membaca angka tersebut. Software-software spammers sekarang sudah sangat canggih dan sudah mampu membaca security number!!! .
CAPTCHA
Apa itu CAPTCHA? CAPTCHA merupakan sebuah program untuk menggenerate andka yang sulit dikenali oleh bots tadi tapi mudah dikenali oleh manusia. Algoritma CAPTCHA yang paling bagus diciptakan oleh Carnegie Mellon University, sayangnya algoritma CAPTCHA merupakan trademark dari Carnegie Mellon University dan algoritma tersebut tidak bisa sembarangan digunakan, algoritma tersebut digunakan oleh Yahoo, Google dan situs-situs besar lainnya. Tapi kita jangan menyerah, jika anda jago anda bisa membuat algoritma sendiri :)
Atau kita bisa juga menggunakan images, jadi kita memiliki kumpulan gambar huruf-huruf dan angka yang berbeda-beda, nah gambar tersebut kita tampilkan secara acak. Atau menggunakan cara saya, cara yang paling sederhana dan nggak perlu banyak mikir :) yaitu menggenerate angka acak biasa kemudian diatasnya kita coret-coret dengan acak. Seperti yang terlihat pada sistem komentar dibawah artikel ini, sangat sederhana :D
Memanfaatkan GD Library dan Session
Untuk membuat gambar didalam PHP kita tentu saja memanfaatkan GD Library. Saya tidak akan mengajarkan GD Library disini, Dan kita akan memanfaatkan sesssion untuk mengirim nilai pada security number tersebut agar lebih aman. Saya banyak melihat website yang menggunakan security number tetapi jawaban dari angka tersebut tersimpan di form, bisanya disimpan didalam . Atau ada juga yang disimpan didalam link pada browsernya. Kalau begitu sama saja bohong, kita sama saja membuat security number plus jawaban dari angka tersebut. Nah, disini kita akan mengirim jawabannya dengan menggunakan Session, paling tidak agar terenkripsi lah. Oke tidak usah berlama-lama, sekarang anda coba lihat dulu seperti apa hasilnya yang akan kita buat.. Pastikan gd library nya udah aktif, cek php.ini cari #extension=php_gd2.dll terus dihapus tanda pagarnya. Pertama-tama kita buat script PHP untuk menggenerate angkanya dulu, buatlah file capcay.php dan isilah dengan kode berikut ini:
$sid=trim($HTTP_GET_VARS["sid"]);
session_id($sid);
session_start();
$angka = $HTTP_SESSION_VARS["angka"];
mt_srand((double)microtime()*1000000);
$jarak1 = mt_rand(0,10);
$jarak2 = mt_rand(0,10);
$jarak3 = mt_rand(0,10);
$jarak4 = mt_rand(0,10);
$ujung1 = mt_rand(0,60);
$ujung2 = mt_rand(0,60);
$ujung3 = mt_rand(0,60);
$ujung4 = mt_rand(0,60);
$ujung5 = mt_rand(0,60);
$ujung6 = mt_rand(0,60);
$ujung7 = mt_rand(0,60);
$ujung8 = mt_rand(0,60);
$warna1 = mt_rand(0,150);
$warna2 = mt_rand(0,150);
$warna3 = mt_rand(0,150);
$warna4 = mt_rand(0,150);
$warna5 = mt_rand(0,150);
$warna6 = mt_rand(0,150);
$height = 13; 
$width = 62; 
$im = ImageCreate($width, $height); 
$background = ImageColorAllocate($im, 255,255,255); 
$warnagaris = ImageColorAllocate($im, $warna1, $warna2, $warna3); 
$warnaangka = ImageColorAllocate($im, $warna4, $warna5, $warna6); 
ImageFill($im, 0, 0, $background); 
ImageLine($im, 0, $jarak1, $ujung1, $ujung2, $warnagaris); 
ImageLine($im, 0, $jarak2, $ujung3, $ujung4, $warnagaris); 
ImageLine($im, 60, $jarak3, $ujung5, $ujung6, $warnagaris); 
ImageLine($im, 60, $jarak4, $ujung7, $ujung8, $warnagaris); 
ImageString ($im, 6, 10, 0,  $angka, $warnaangka);
Imagejpeg($im); 
?>

Itu nanti akan menghasilkan images dalam format .jpg, tenang saja akan saya jelaskan nanti, sekarang buatlah file form.php dan isilah dengan kode berikut ini:
$sid=session_id();
if(!$sid){
session_start();
$sid=session_id();
}
if ($submit) {
  if ($code!=$angka) {
    echo "Security number salah.
"
;
  } else {
    echo "Selamat Anda benar menuliskan angkanya";
  }
}
?>
<h4>Kirim Komentar:h4>
<form method="post" action="">
<p>
Security Number: <input type="text" name="code" class="textbox"  />
mt_srand((double)microtime()*1000000);
$angka1 = mt_rand(0,9);
$angka2 = mt_rand(0,9);
$angka3 = mt_rand(0,9);
$angka4 = mt_rand(0,9);
$angka5 = mt_rand(0,9);
$angka="$angka1$angka2$angka3$angka4$angka5";
$HTTP_SESSION_VARS["angka"] = $angka;
?>
<img src="capcay.php?sid=" alt="Security Number" /> <br /><br />
<input type="submit" name="submit" value="Kirim Komentar" />
p>
form>
Silahkan anda jalankan form.php, muncul kan angkanya, cukup mudah kan?

Tidak ada komentar: