Ok kali ini kita coba mencegah postingan spammer dengan image generator. Sehingga seorang user yang ingin mengirimkan sebuah komentar, harus terlebih dahulu memasukkan kode berupa angka yang tertera didalam gambar.
Beberapa alasan validasi code menggunakan gambar adalah karena jika kita menggunakan text, sebuah bot dapat diprogram untuk membacanya, sekalipun text tersebut adalah sebuah rumus hitung-hitungan. Berbeda dengan gambar yang harus dilihat dan bukan dibaca. Mungkin yang sudah terbiasa menggunakan captcha hal ini tidak perlu dikhawatirkan, tapi buat yang kurang terbiasa menggunakan captcha atau ingin menggunakan codingan sendiri, script berikut bisa dicoba.. ^_^
ok, go to code
script diatas adalah fungsi untuk membuat sebuah kode angka random dalam bentuk gambar. Sehingga jika sebuah bot berusaha untuk menelusuri kode validasi, maka dia hanya akan mendapati sebuah gambar dengan nama random yang juga sudah diconvert. Cara kerja fungsi diatas adalah sebagai berikut:
- menciptakan sebuah angka random ($no_random)
- kemudian mengubahnya menjadi file image beserta ukuran gambar, ukuran font, dan warna font)
- kemudian membuat sebuah variabel "$validator" berisi angka random tadi yang sudah dikonversi, dan tentunya kita buat sedemikian rupa agar bot tidak bisa mendapatkan angka random yang sesuai dengan yang tertera pada gambar. Pola yang kita gunakan disini adalah mengubah nilai Decimal angka random menjadi bilangan Hexa, kemudian dibalik menggunakan fungsi strrev() pada PHP.
Penggunaan fungsi diatas pada sebuah form komentar bisa seperti ini (disesuaikan)
Pada saat proses pengecekkan hasil post, kita harus mengembalikan nilai $validator menjadi nilai awal yang sebenarnya. Caranya tetap sama, yakni dengan me-reverse lagi nilai $validator kemudian mengubah bilangan Hexa tersebut kembali menjadi bilangan Decimal.
Beberapa alasan validasi code menggunakan gambar adalah karena jika kita menggunakan text, sebuah bot dapat diprogram untuk membacanya, sekalipun text tersebut adalah sebuah rumus hitung-hitungan. Berbeda dengan gambar yang harus dilihat dan bukan dibaca. Mungkin yang sudah terbiasa menggunakan captcha hal ini tidak perlu dikhawatirkan, tapi buat yang kurang terbiasa menggunakan captcha atau ingin menggunakan codingan sendiri, script berikut bisa dicoba.. ^_^
ok, go to code
function generateCode(){
global $no_random,$validator;
$im = imagecreatetruecolor(63,28);
$text_color = imagecolorallocate($im, 233, 14, 200);
$no_random = rand(100000,999999);
imagestring($im, 100, 5, 5, $no_random, $text_color);
ob_start();
imagejpeg($im, NULL, 100);
$contents = ob_get_contents();
ob_end_clean();
imagedestroy($im);
$validator = strrev(dechex($no_random));
$fh = fopen("./temp/".$validator.".jpg", "a+" );
fwrite( $fh, $contents );
fclose( $fh );
echo "
script diatas adalah fungsi untuk membuat sebuah kode angka random dalam bentuk gambar. Sehingga jika sebuah bot berusaha untuk menelusuri kode validasi, maka dia hanya akan mendapati sebuah gambar dengan nama random yang juga sudah diconvert. Cara kerja fungsi diatas adalah sebagai berikut:
- menciptakan sebuah angka random ($no_random)
- kemudian mengubahnya menjadi file image beserta ukuran gambar, ukuran font, dan warna font)
- kemudian membuat sebuah variabel "$validator" berisi angka random tadi yang sudah dikonversi, dan tentunya kita buat sedemikian rupa agar bot tidak bisa mendapatkan angka random yang sesuai dengan yang tertera pada gambar. Pola yang kita gunakan disini adalah mengubah nilai Decimal angka random menjadi bilangan Hexa, kemudian dibalik menggunakan fungsi strrev() pada PHP.
Penggunaan fungsi diatas pada sebuah form komentar bisa seperti ini (disesuaikan)
echo "<form name='f' action='' method='post'>
<table>
<tr><td>Tulis Komentar<br>
<textarea name='msg'></textarea>
</td>
</tr>
<tr><td>"; generateCode();
echo "<br>Masukkan kode diatas : <input type='text' name='code'>
<input type='hidden' name='validator' value='".$validator."'>
<input type='submit' name='submit'>
</td>
</tr>
</table></form>";
Pada saat proses pengecekkan hasil post, kita harus mengembalikan nilai $validator menjadi nilai awal yang sebenarnya. Caranya tetap sama, yakni dengan me-reverse lagi nilai $validator kemudian mengubah bilangan Hexa tersebut kembali menjadi bilangan Decimal.
Cara diatas sebenarnya cuma memanfaatkan logika ja, kalo pengen lebih rumit lagi, bisa saja ubah bilangan menjadi Biner, kemudian gunakan fungsi OR,XOR, AND, atau operator logika lainnya, yang penting pastikan bahwa angka random awal yang tertera pada gambar berbeda dengan input kode yang sudah dikonversi, dan susah untuk dipahami, neh didapat darimana... :)if($_POST['submit']){
$msg = $_POST['msg'];
$code = $_POST['code'];
$val = $_POST['validator'];
$getcode = hexdec(strrev($val));
if($code==$getcode){
$input = mysql_query("INSERT INTO tbl_comments
VALUES ('','".$msg."')");
echo "Pesan terkirim";
}else{
echo "Kode yang anda masukkan salah";
}
}