Solusi Praktis Hardening Captcha

Setelah saya ngepost tentang cracking captcha, pada post ini akan dibahas bagaimana cara agar captcha milik kita sedikit lebih kuat dari ancaman bot/script yang memiliki kemampuan membaca karakter pada image dengan teknik OCR. Pada post sebelumnya sudah disinggung bagaimana membuat captcha yang susah dibaca dengan menambah noise pada image captcha. Yang akan kita lakukan adalah membuat captcha yang memiliki cukup noise sehingga sulit dibaca dengan teknik OCR tersebut.

Langsung saja ke pokok permasalahan membuat captcha pada website, dibawah ini merupakan code pembuat image random captcha. Save dengan nama captcha.php :

&lt?php
session_start();

$width  = 100;
$height =  40;
$length =   5;

$baseList = '0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$code    = "";
$counter = 0;

$image = @imagecreate($width, $height) or die('Cannot initialize GD!');

for( $i=0; $i<10; $i++ ) {
   imageline($image, 
	     mt_rand(0,$width), mt_rand(0,$height), 
	     mt_rand(0,$width), mt_rand(0,$height), 
	     imagecolorallocate($image, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)));
}

for( $i=0, $x=0; $i<$length; $i++ ) {
   $actChar = substr($baseList, rand(0, strlen($baseList)-1), 1);
   $x += 10 + mt_rand(0,10);
   imagechar($image, mt_rand(10,5), $x, mt_rand(6,20), $actChar, 
      imagecolorallocate($image, mt_rand(0,155), mt_rand(0,155), mt_rand(0,155)));
   $code .= $actChar;
}

header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

$_SESSION['securityCode'] = $code;

?>

Pada form yang akan mengikutsertakan captcha di atas, tinggal tambahkan tag HTML image biasa:

<img src="path/to/captcha.php" />

Terakhir adalah halaman verifikasi kode captcha input dari user dibandingkan dengan kode captcha yang valid yang diambil dari variabel $_SESSION[‘securityCode’]. Contoh kode dibawah ini hanya memperlihatkan penggunaan kode captcha di atas secara garis besar yaa. Silahkan dikreasikan untuk kebutuhan aplikasi web nya masing-masing:

<?php
session_start();

$captcha1=$_POST["kode_captcha"];
$captcha2=$_SESSION["securityCode"];

if($captcha1==$captcha2){
	//congrats! ente not robot euy! then you can do some magic here!
}

...

?>

Testing Captcha buatan Kita dengan program Tesseract-OCR

Untuk percobaan keamanan captcha generator baru saya ini, saya menggunakan program Tesseract-OCR. Program akan mendeteksi karakter huruf dan angka yang terdapat pada gambar. Berikut perbandingan hasil antara “captcha lemah” Challenge-1 dengan captcha hasil buatan kita di Challenge-2…

Challenge-1
Challenge-1
Contoh Captcha Weak Challenge-1 yang Terbaca oleh Tesseract-OCR
Contoh Captcha Weak Challenge-1 yang Terbaca oleh Tesseract-OCR

Oke, challenge-1 cracked.. Mari kita bandingkan dengan captcha buatan kita ini yang dilengkapi dengan “garis-garis pengecoh” dibelakang karakter-karakter gambar captcha nya…

Challenge-2
Challenge-2
Captcha Kita (Challenge-2) Tidak dapat Terbaca oleh Tesseract-OCR
Captcha Kita (Challenge-2) Tidak dapat Terbaca oleh Tesseract-OCR

Demikian cara praktis membuat captcha sendiri yang sudah relatif aman dari serangan bot yang sudah dibekali teknik OCR standar.. (Standar loh ya.. hehehe..). Semoga bermanfaat.

One thought on “Solusi Praktis Hardening Captcha

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.