arradyscode

http://www.arradyscode.com

Welcome to arradyscode.
Share algorithms, logic and codes of programming languages.

Membuat dan Memahami Pembuatan CAPTCHA pada PHP

Form yang dapat diakses oleh public, biasanya akan rentan dengan pengguna-pengguna iseng yang menginputkan data asal. Selain itu, form yang sifatnya membutuhkan authentikasi bisa dicoba-coba dengan menggunakan bruteforce attack.
Oleh karena itu, dibutuhkan sebuah kode acak yang harus diisi sebelum melakukan submit form. Pada tutorial kali ini saya akan mencoba menjelaskan pembuatan captcha pada pemrograman PHP.
Form yang akan saya buat hanya memiliki 1 inputan, yaitu inputan khusus untuk captcha nya itu sendiri. Berikut coding dasar pembuatan captha:
<?php
  // random angka 10000 hingga 99999,
  // Anda juga bisa menggunakan fungsi random yg dibuat
  // agar dapat menampung huruf dan angka
  $teksnya = rand(10000,99999);
?>
<form method="POST">
Kode Capcha :<br />
<input readonly="" type="text" value="<?php echo $teksnya; ?>" />

Masukkan Kode Diatas:<br />
<input name="capt" type="text" value="" />

<input name="submit" type="submit" /> 
</form>

coding diatas akan menghasilkan bentuk form seperti ini:
 
Anda dapat melihat, kode Captcha yang dihasilkan adalah hasil random angka 10000 hingga 99999. Kode tersebutlah yang akan dicek benar atau tidak pengisiannya pada saat user melakukan submit.
Kemudian, disaat user melakukan submit, cek apakah capthca sesuai yang diisi user atau tidak. Karena posisi penyimpanan captcha sebelumnya dibutuhkan, maka penyimpanan dilakukan di SESSION.
sehingga coding diatas dilengkapi menjadi:
<?php
  session_start();
  //cek disini, sebelum generate captcha baru, jangan terbalik
  if ($_SESSION['capt'] == $_POST['capt']){
    echo 'Captcha Benar';
    // proses-proses lainnya.
  }else{
    echo 'Capthca Salah';
  }

  // random angka 10000 hingga 99999,
  // Anda juga bisa menggunakan fungsi random yg dibuat
  // agar dapat menampung huruf dan angka
  $teksnya = rand(10000,99999);
  $_SESSION['capt'] = $teksnya;
?>

<form method="POST">
  Kode Capcha :<br/>
  <input type="text" value="<?php echo $teksnya; ?>" readonly/><br/>
  Masukkan Kode Diatas:<br/>
  <input type="text" name="capt" value="" /><br/>
  <input type="submit" name="submit"/> 
</form>
Silahkan dicoba terlebih dahulu sebelum dilanjutkan. Ingat untuk tidak terbalik, pengecekan dilakukan diatas fungsi generate capctha yang baru.
Kendalanya sekarang adalah, kode tersebut terlalu riskan, karena dapat diambil dengan Curl, atau dapat juga dicopas saja oleh user. Sehingga dibutuhkan fungsi khusus agar kode tersebut ditampilkan dalam bentuk gambar.
Oleh karena ini, perlu dibuat sebuah fungsi untuk mengubah teks menjadi gambar, agar hanya bisa dibaca dan tidak dapat dicopy atau di grab. Gambar ini nantinya akan dipanggil oleh halaman yang akan menampilkan captcha.
Untuk lebih jelasnya, coding-coding yang saya jelaskan diatas dipisah, menjadi 2 halaman.

index.php

<?php
  session_start();
  if ($_SESSION['capt'] == $_POST['capt']){
    echo 'Captcha Benar';
  }else{
    echo 'Capthca Salah';
  }
?>

<form method="POST">
  Kode Capcha :<br/>
  <img src='capt.php'/><br/>
  Masukkan Kode Diatas:<br/>
  <input type="text" name="capt" value="" /><br/>
  <input type="submit" name="submit"/> 
</form>

capt.php

<?php
session_start();
$textnya = rand(10000,99999);
$_SESSION["capt"] = $textnya;

//warna gambar dan teks
$width = 65;
$height = 25;
$font_size = 14;
$image_p = imagecreate($width,$height);
$white   = imagecolorallocate($image_p,0,0,0);
$black   = imagecolorallocate($image_p,225,225,225);

imagestring($image_p,$font_size,5,5,$textnya,$black);
imagejpeg($image_p,null,80);
?>
Silahkan buat masing-masing halaman tersebut, jalankan file index.php, dan captcha Anda telah selesai jika Anda telah mendapatkan output seperti ini

Terbaru di blog ini:

Mungkin Anda juga ingin membaca:

Berkomentarlah sesuai topik.

1 komentar:

Gunakan kode berikut untuk menambahkan emoticon ke komentar:
:)
:(
=(
^_^
:D
=D
|o|
@@,
;)
:-bd
:-d
:P
:ngakak:

Untuk menuliskan Syntax: [code] code disini [/code]

Untuk menuliskan Quote: [quote] quote disini [/quote]

Berkomentarlah sesuai topik