Menggunakan reCAPTCHA dengan PHP

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

Library PHP reCAPTCHA menyediakan cara mudah untuk menempatkan CAPTCHA di situs web PHP Anda, membantu Anda menghentikan {i>bot <i}untuk menyalahgunakannya. Library ini menggabungkan reCAPTCHA API.

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

Mulai Cepat

Setelah mendaftarkan kunci API, berikut adalah petunjuk dasar untuk menginstal reCAPTCHA di situs Anda. Lengkap panduan referensi 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 di dalam <form> tempat widget reCAPTCHA akan berada 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 "action" adalah "verify.php". Sekarang, Verify.php adalah file tujuan tempat nilai formulir ini dikirim. Anda akan membutuhkan file Verify.php di lokasi yang sama dengan html klien.

Fungsi requirements_once dalam contoh di atas mengharapkan recaptchalib.php berada di bagian yang sama sebagai file formulir. Jika file berada di direktori lain, Anda harus menautkannya dengan benar. Misalnya jika recaptchalib.php Anda berada di direktori yang disebut "captcha" yang berada di sama dengan file formulir Anda, 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 merepresentasikan apakah pengguna berhasil menyelesaikan tantangan.
  • Jika $resp->is_valid benar, maka tantangan captcha telah diselesaikan dengan benar dan Anda harus melanjutkan pemrosesan formulir.
  • Jika $resp->is_valid salah, pengguna gagal memberikan captcha yang benar teks dan Anda harus menampilkan ulang formulir agar mereka dapat mengulang lagi. Dalam hal ini, $resp->error akan menjadi kode error yang dapat diberikan kepada recaptcha_get_html. Meneruskan kode error akan membuat kontrol reCAPTCHA menampilkan pesan yang menjelaskan bahwa pengguna salah memasukkan teks dan harus mencoba lagi.
  • Perhatikan bahwa kode ini meminta kunci private, yang tidak boleh dibingungkan dengan kunci publik. Anda mendapatkannya dari halaman yang sama dengan kunci publik.

    Pastikan juga formulir Anda diatur untuk mendapatkan variabel formulir menggunakan $_POST, bukan $_REQUEST, dan formulir itu sendiri menggunakan metode POST.

    Selesai. reCAPTCHA kini seharusnya berfungsi di situs Anda.

    Bacaan Lebih Lanjut

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

    Di bawah ini adalah daftar lengkap semua metode Plugin PHP reCAPTCHA.

    Fungsi recaptcha_get_html

    Fungsi recaptcha_get_html menampilkan HTML yang menyajikan reCAPTCHA ke tindakan .

    recaptcha_get_html
    Parameter
    string $pubkey --. tidak diperlukan. Kunci publik reCAPTCHA Anda, dari Halaman Pendaftaran API
    $error -- string. opsional (null adalah default) Jika string ini ditetapkan, area reCAPTCHA akan menampilkan kode error diberikan. Kode error ini berasal dari ReCaptchaResponse->$error
    $use_ssl -- boolean. opsional (salah adalah default) Haruskah API berbasis SSL digunakan? Jika Anda menampilkan halaman ke melalui SSL, pastikan untuk menyetelnya ke {i>true<i} agar dialog kesalahan tidak muncul di browser pengguna.
    Nilai yang ditampilkan String yang berisi HTML untuk dimasukkan ke halaman web.

    Fungsi recaptcha_check_answer

    Setelah pengguna mengisi formulir HTML, termasuk jawaban mereka untuk CAPTCHA, kita ingin memeriksa jawaban mereka saat mereka mengirimkan formulir menggunakan Fungsi recaptcha_check_answer. Jawaban pengguna ada dalam dua isian formulir, recaptcha_challenge_field dan recaptcha_response_field. Tujuan Library reCAPTCHA akan mengirimkan permintaan HTTP ke server reCAPTCHA dan memverifikasi ke suatu jawaban tertentu.

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

    ReCaptchaResponse
    Kolom
    $is_valid -- boolean Apakah reCAPTCHA yakin bahwa jawabannya valid?
    $error -- string Jika jawabannya tidak valid, apa masalahnya? Kode {i>error <i}ini dapat berupa digunakan dalam recaptcha_get_html
    Nilai yang ditampilkan HTML atau url mentah untuk mendekode alamat email, tergantung pada fungsi Anda dipanggil.

    Sembunyikan Email

    Library PHP reCAPTCHA menyertakan binding untuk Mailhide API. Ini API memungkinkan Anda membungkus email di 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 langsung ditempatkan di halaman web Anda. Bagian nama pengguna dari email yang diteruskan terpotong dan digantikan dengan tautan yang memanggil Mailhide. Versi _url menunjukkan url untuk mendekode email itu dan menyerahkannya pada Anda untuk menempatkan email itu di 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>