Menggunakan reCAPTCHA dengan PHP

Penting: reCAPTCHA API versi 1.0 tidak lagi didukung, upgrade ke Versi 2.0. Pelajari lebih lanjut

Library reCAPTCHA PHP menyediakan cara mudah untuk menempatkan CAPTCHA di situs PHP Anda, yang membantu Anda menghentikan bot agar tidak menyalahgunakannya. Library ini menggabungkan reCAPTCHA API.

Untuk menggunakan reCAPTCHA dengan PHP, Anda dapat mendownload library PHP reCAPTCHA. Anda hanya memerlukan satu file dari sana (recaptchalib.php). File lainnya adalah contoh, readme, dan materi hukum -- file tersebut tidak memengaruhi fungsi.

Mulai Cepat

Setelah mendaftar kunci API, berikut adalah petunjuk dasar untuk menginstal reCAPTCHA di situs Anda. Panduan referensi lengkap untuk plugin PHP dapat ditemukan di bawah ini.

Sisi Klien (Cara memunculkan gambar CAPTCHA)

Jika ingin menggunakan library PHP untuk menampilkan widget reCAPTCHA, Anda harus menyisipkan cuplikan kode ini ke dalam elemen <form> tempat widget reCAPTCHA akan ditempatkan:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

Dengan kode tersebut, formulir Anda akan terlihat seperti ini:

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

Jangan lupa menyetel $publickey dengan mengganti your_public_key dengan kunci publik API Anda.

Perhatikan bahwa nilai atribut "action" adalah "verify.php". Sekarang, {i>verify.php<i} adalah file tujuan tempat pengiriman nilai formulir ini. Jadi Anda memerlukan file {i>verify.php<i} di lokasi yang sama dengan {i>html<i} klien.

Fungsi required_once pada contoh di atas mengharapkan recaptchalib.php berada di direktori yang sama dengan file formulir Anda. Jika berada di direktori lain, Anda harus menautkannya dengan benar. Misalnya, jika recaptchalib.php Anda berada di direktori bernama "captcha" yang berada pada level yang sama dengan file formulir, fungsinya akan terlihat seperti ini: require_once('captcha/recaptchalib.php').

Sisi Server (Cara menguji apakah pengguna memasukkan jawaban yang benar)

Kode berikut harus ditempatkan di bagian atas fileverify.php:

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

Dalam kode di atas:

  • recaptcha_check_answer menampilkan objek yang menunjukkan apakah pengguna berhasil menyelesaikan tantangan.
  • Jika $resp->is_valid bernilai benar, maka tantangan reCAPTCHA telah diselesaikan dengan benar dan Anda harus melanjutkan pemrosesan formulir.
  • Jika $resp->is_valid bernilai salah (false), pengguna gagal memberikan teks reCAPTCHA yang benar. Anda harus menampilkan kembali formulir agar pengguna dapat mencoba lagi. Dalam hal ini, $resp->error akan menjadi kode error yang dapat diberikan ke recaptcha_get_html. Jika kode error diteruskan, kontrol reCAPTCHA akan menampilkan pesan yang menjelaskan bahwa pengguna salah memasukkan teks dan harus mencoba lagi.
  • Perhatikan bahwa kode ini meminta kunci private, yang tidak boleh sama dengan kunci publik. Anda mendapatkannya dari halaman yang sama dengan kunci publik.

    Pastikan juga formulir Anda disetel untuk mendapatkan variabel formulir menggunakan $_POST, bukan $_REQUEST, dan formulir tersebut menggunakan metode POST.

    Selesai! reCAPTCHA seharusnya kini berfungsi di situs Anda.

    Bacaan Lebih Lanjut

  • Menyesuaikan Tampilan dan Nuansa
  • Tips dan Panduan
  • Pemecahan masalah
  • Panduan Referensi Plugin PHP

    Berikut adalah daftar lengkap semua metode Plugin PHP reCAPTCHA.

    Fungsi recaptcha_get_html

    Fungsi recaptcha_get_html menampilkan HTML yang menyajikan reCAPTCHA kepada pengguna.

    recaptcha_get_html
    Parameter
    $pubkey -- string. wajib diisi. Kunci publik reCAPTCHA Anda, dari Halaman Pendaftaran API
    $error -- string. opsional (null adalah default) Jika string ini disetel, area reCAPTCHA akan menampilkan kode error yang diberikan. Kode error ini berasal dari ReCaptchaResponse->$error
    $use_ssl -- boolean. opsional (salah adalah default) Apakah API berbasis SSL harus digunakan? Jika Anda menampilkan halaman kepada pengguna melalui SSL, pastikan untuk menyetelnya ke true sehingga dialog error tidak muncul di browser pengguna.
    Nilai yang ditampilkan String yang berisi HTML untuk ditempatkan di halaman web.

    Fungsi recaptcha_check_answer

    Setelah pengguna mengisi formulir HTML, termasuk jawaban CAPTCHA, kami ingin memeriksa jawaban mereka ketika mereka mengirimkan formulir menggunakan fungsi recaptcha_check_answer. Jawaban pengguna akan memiliki dua kolom formulir, recaptcha_challenge_field dan recaptcha_response_field. Library reCAPTCHA akan membuat permintaan HTTP ke server reCAPTCHA dan memverifikasi jawaban pengguna.

    recaptcha_check_answer
    Parameter
    $privkey -- string. wajib diisi. Kunci pribadi reCAPTCHA Anda, dari Halaman Pendaftaran API.
    $remoteip -- string. wajib diisi. Alamat IP pengguna, dalam format 192.168.0.1
    $challenge -- string. required.
    Nilai kolom formulir recaptcha_challenge_field
    $response -- string. required Nilai kolom recaptcha_response_field
    Nilai yang ditampilkan Instance class ReCaptchaResponse

    ReCaptchaResponse
    Kolom
    $is_valid -- boolean Apakah reCAPTCHA yakin bahwa jawabannya valid?
    $error -- string Jika jawaban tidak valid apa masalahnya? Kode error ini dapat digunakan dalam recaptcha_get_html
    Nilai yang ditampilkan HTML atau URL mentah untuk mendekode alamat email, bergantung pada fungsi yang Anda panggil.

    Mailhide

    Library PHP reCAPTCHA menyertakan binding untuk Mailhide API. Dengan API ini, Anda dapat menggabungkan email dalam reCAPTCHA untuk mencegah spammer melihatnya: ujian...@example.com.

    Bagian Mailhide dari Library PHP memerlukan modul mcrypt PHP.

    Mailhide API terdiri dari dua fungsi recaptcha_mailhide_html dan recaptcha_mailhide_url. Fungsi memiliki parameter yang sama. Versi _html menampilkan HTML yang dapat ditempatkan langsung di halaman web Anda. Bagian nama pengguna email yang diteruskan akan terpotong dan diganti dengan link yang memanggil Mailhide. Versi _url memberi Anda URL untuk mendekode email dan menyerahkannya kepada Anda untuk menempatkan email dalam HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Parameter
    $pubkey -- string Kunci publik Mailhide dari halaman pendaftaran
    $privkey -- string Kunci pribadi Mailhide dari halaman pendaftaran
    $email -- string Alamat email yang ingin Anda sembunyikan.

    Contoh berikut menunjukkan cara menggunakan Mailhide:

    <html><body>
    <?
    require_once ("recaptchalib.php");
    // get a key at http://www.google.com/recaptcha/mailhide/apikey
    $mailhide_pubkey = '';
    $mailhide_privkey = '';
    ?>
    The Mailhide encoding of example@example.com is
    <?
    echo recaptcha_mailhide_html ($mailhide_pubkey,
                                  $mailhide_privkey,
                                  "example@example.com");
    ?>.
    <br>
    The url for the email is:
    <?
    echo recaptcha_mailhide_url ($mailhide_pubkey,
                                 $mailhide_privkey,
                                 "example@example.com");
    ?>
    <br>
    </body></html>