Verifikasi Form Menggunakan Captcha

Verifikasi Form Menggunakan Captcha

Verifikasi Form Menggunakan Captcha CAPTCHA atau Captcha adalah suatu bentuk uji tantangan-tanggapan (challange-response test) yang digunakan dalam perkomputeran untuk memastikan bahwa jawaban tidak dihasilkan oleh suatu komputer. Proses ini biasanya melibatkan suatu komputer (server) yang meminta seorang pengguna untuk menyelesaikan suatu uji sederhana yang dapat dihasilkan dan dinilai oleh komputer tersebut. Karena komputer lain tidak dapat memecahkan CAPTCHA, pengguna manapun yang dapat memberikan jawaban yang benar akan dianggap sebagai manusia. Oleh sebab itu, uji ini kadang disebut sebagai uji Turing balik, karena dikelola oleh mesin dan ditujukan untuk manusia, kebalikan dari uji Turing standar yang biasanya dikelola oleh manusia dan ditujukan untuk suatu mesin. CAPTCHA umumnya menggunakan huruf dan angka dari citra terdistorsi yang muncul di layar Sumber : wikipedia.org.

Sebelum ada CAPTCHA, spammer/hacker dapat membuat program untuk secara otomatis mengisi formulir seperti pendaftaran email gratis, sehingga ia akan memperoleh ribuan alamat email dengan mudah untuk kemudian disalah-gunakan Atau untuk mengubah hasil sebuah polling online, seseorang bisa saja membuat program sederhana untuk mengisi polling tersebut dengan jawaban yang sama sebanyak ribuan atau bahkan jutaan kali. Akibatnya polling itu tentu saja menjadi tidak valid

    Fungsi Pokok dari captcha itu sendiri adalah :
  1. Mencegah Comment Spam
  2. pada umumnya Pemilik web/blog/dll tidak hanya ingin komment webnya terlihat bagus dalam penampilan, kuantitas tapi tentu kualitas , tp gak tau kalo adminnya sendiri yang spam
  3. Mencegah Spam Bot
  4. Tau sendiri Kan bot tak bisa membaca captcha, karena string string pemrogramannya sudah tetap . tak mungkin capthca yang setiap saat berubah dapat dibaca kecuali kalau bot itu berasal dari engine Blog itu sendiri
  5. Mencegah Flood
  6. Siapa Yang Ingin Dia di Flood ? kecuali flood like tp kalau flood kata kata yang tidak pantas banyak lagi siapa yang mau coba ?? (Flood adalah mangirimkan data secara berulang ulang)
  7. Melindungi Pendaftaran Email/User
  8. Dulu Pernah Kejadian Yahoo dan google diserang semacam robot yang mendaftar email ampe ribuan! kebayang gak? ribuan mail palsu , pasti om google dan mpok yahoo marah

Captcha biasanya terdiri dari 3 hal, yaitu bentuk, distorsi, dan teks. Ikuti langkah-langkah berikut ini untuk membuat sebuah captcha :

  1. Tampilan Gambar kosong pada browser
  2. Langkah pertama kita membuat sebuah folder dengan nama captcha yang berisi file index.php dan image.php
    index.php
              <?php
          session_start();
           ?>
          <!DOCTYPE html>
          <html>
           <head>
            <title>Aplikasi Captcha</title>
            <style>
              body{
                background-color: #ddd;
                margin: 20px;
              }
              .wrapper{
                display:block;
                width: 400px;
                margin: 0 auto;
              }
            </style>
           </head>
           <body>
             <?php
              include_once "image.php";
              create_image();
              ?>
              <div class="wrapper">
                <form action="proses.php" method="post">
                  <h2>Belajar Membuat Captcha</h2>
                  <p><img src="image.png"></p>
                  <input type="text" name="nilaiCaptcha" >
                  <input type="submit" name="submit" value="SUBMIT">
                </form>
                <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
                  <input type="submit" value="RESET">
                </form>
    
              </div>
    
           </body>
          </html>
       
    image.php
         <?php
         function create_image(){
    
           $image = imagecreatetruecolor(150, 50);
           imagepng($image, "image.png");
    
         }
         ?>
       

    Di dalam function create_image(), variabel yang digunakan untuk merujuk gambar dikembalikan oleh imagecreatetruecolor() fungsi yang mengambil lebar dan panjang gambar sebagai argumen. imagepng() menciptakan citra png dari nama tertentu dan path (dalam direktori yang sama). Perlu diperhatikan bahwa fungsi imagepng akan menjadi baris terakhir dari function create_image.
    Sebuah gambar dengan warna hitam akan menjadi output setelah langkah pertama kita selesai buat.

  3. Buat bentuk
  4. Selanjutnya kita akan memilih persegi panjang dengan menggunakan fungsi imagefilledrectangle(). Kemudian fungsi imagecollorallocate() yang berfungsi mengalokasikan warna dengan kombinasi RGB.
         $color = imagecolorallocate($image, 255, 255, 255);
         imagefilledrectangle($image, 0, 0, 400, 50, $color);
       
  5. Menghasilkan garis acak
  6. Sekarang kita akan mulai membuat bagian distorsi captcha. Dalam PHP, garis yang dihasilkan dari titik awal (x1, y1) ke titik akhir (x2, y2). Kita akan membuat sebuah garis acak dengan menggunakan fungsi for.
        $color_line = imagecolorallocate($image, 0, 0, 0);
    
          // membuat garis pada gambar
          for($i=0; $i<5; $i++){
            imageline($image, 0, rand()%50, 150, rand()%50, $color_line);
          }
       
  7. menghasilkan titik acak
  8. Titik acak akan dihasilkan dalam cara yang sama seperti garis acak. Fungsi yang digunakan adalah imagesetpixel(). Fungsi ini mengambil nilai koordinat dimana titikakan ditempatkan di dalam kotak.
        // membuat titik titik pada gambar
          for($i=0; $i<1000; $i++){
            imagesetpixel($image, rand()%150, rand()%50, $color_line);
          }
       
  9. Menghasilkan teks acak
  10. Sekarang kita akan membuat teks acak yang menunjukkan posisi didalam string
       // membuat abjad di dalam gambar
       $abjad = "abcdefghijklmnopqrstuvwxyz";
       $len = strlen($abjad);
       $abjads = $abjad[rand(0, $len-1)];
    
       $kata = "";
       for($i=0; $i<5; $i++){
         $abjads = $abjad[rand(0, $len-1)];
         imagestring($image, 5, 5+($i*30), 20, $abjads, $color_line);
         $kata .= $abjads;
       }
       $_SESSION['captcha'] = $kata;
      
    imagestring() berfungsi untuk menulis teks dalam gambar yang telah kita buat dan memilik 6 argumen :
    1. Gambar Referensi
    2. Font Ukuran teks (mulai dari angka 1 sampai 5)
    3. x-koordinat (berubah secara proporsional untuk setiap alfabet)
    4. y-koordinat (tetap sama, meskipun kita bisa merubah ini secara acak)
    5. String yang harus ditulis di dalam gambar
    6. Font warna teks
    Untuk langkah pembuatan gambar captcha sudah selesai, jika kita gabungkan semua kode dari awal sampai akhir pada function create_image syntaks nya seperti dibawah ini
    image.php
       <?php
       function create_image(){
    
         $image = imagecreatetruecolor(150, 50);
         $color = imagecolorallocate($image, 255, 255, 255);
         imagefilledrectangle($image, 0, 0, 400, 50, $color);
    
    
         $color_line = imagecolorallocate($image, 0, 0, 0);
    
         // membuat garis pada gambar
         for($i=0; $i<5; $i++){
           imageline($image, 0, rand()%50, 150, rand()%50, $color_line);
         }
    
         // membuat titik titik pada gambar
         for($i=0; $i<1000; $i++){
           imagesetpixel($image, rand()%150, rand()%50, $color_line);
         }
    
       // membuat abjad di dalam gambar
       $abjad = "abcdefghijklmnopqrstuvwxyz";
       $len = strlen($abjad);
       $abjads = $abjad[rand(0, $len-1)];
    
       $kata = "";
       for($i=0; $i<5; $i++){
         $abjads = $abjad[rand(0, $len-1)];
         imagestring($image, 5, 5+($i*30), 20, $abjads, $color_line);
         $kata .= $abjads;
       }
       $_SESSION['captcha'] = $kata;
    
         imagepng($image, "image.png");
    
       }
        ?>
      

Sekarang kita buat untuk langkah untuk pemrosesannya. buatlah sebuah file dengan nama proses.php
proses.php

   <?php
   session_start();
   $submit = $_POST['submit'];
   $nilaiCaptcha = $_POST['nilaiCaptcha'];

   if (isset($submit)) {
     if (empty($nilaiCaptcha)) {
       echo "<script>window.alert('Form tidak boleh kosong'); window.location=('index.php');</script>";
     }else{

       if($_SESSION['captcha'] == $nilaiCaptcha){
         header('location:halaman_utama.php');
       }else{
         echo "<script>window.alert('Captcha anda salah'); window.location=('index.php');</script>";
       }
     }
   }

    ?>
  

Langkah terakhir kita membuat sebuah halaman untuk menampilkan jika inputan captcha bernilai benar.
halaman_utama.php

   <!DOCTYPE html>
   <html>
    <head>
      <title>Selamat Datang</title>
    </head>
    <body style="margin-top:20px;">
      <div style="width:400px; margin:0 auto;">
        <h2>Selamat Datang</h2>
        <p>Anda telah berhasil memasukkan <b><i>Nilai Captcha</i></b></p>
        <p><a href="index.php" style="text-decoration:none;">Kembali</a></p>
      </div>
    </body>
   </html>
  

Demo

Tampilan awal kita akan melihat tampilan seperti dibawah ini

Jika kita menuliskan nilai captcha dengan benar, maka kita akan menuju ke halaman utama

Jika kita salah menulis nilai captcha, akan menampilkan alert bahwa captcha yang ditulis salah.

Kesimpulan

Membuat berbagai jenis CAPTCHA di PHP sangatlah mudah. Artikel ini mencakup tiga hal dasar yang digunakan untuk membuat captcha standart : Bentuk, Distorsi dan Teks. Kode yang disajikan disini tidak boleh digunakan dalam pembuatan CAPTCHA di sebuah website karena ada alternatif CAPTCHA yang sangat baik seperti reCAPTCHA, yang juga mendukung output suara. Saya harap anda bisa memahami alur yang telah dijelaskan diatas. Tinggalkan komentar dan umpan balik dibawah ini.

Download kode lengkapnya di bawah sini

Postingan terkait:

Belum ada tanggapan untuk "Verifikasi Form Menggunakan Captcha"