Sử dụng reCAPTCHA với PHP

Lưu ý quan trọng: Phiên bản 1.0 của API reCAPTCHA không còn được hỗ trợ, vui lòng nâng cấp lên phiên bản 2.0. Tìm hiểu thêm

Thư viện PHP reCAPTCHA cung cấp một cách đơn giản để đặt hình ảnh xác thực (CAPTCHA) trên trang web PHP, giúp bạn ngăn bot lạm dụng mã đó. Thư viện này bao bọc API ReCAPTCHA.

Để sử dụng reCAPTCHA với PHP, bạn có thể tải thư viện reCAPTCHA PHP xuống. Bạn sẽ chỉ cần một tệp từ đó (recaptchalib.php). Các tệp khác là ví dụ, readme và nội dung pháp lý – chúng không ảnh hưởng đến chức năng.

Bắt đầu nhanh

Sau khi bạn đăng ký khoá API, dưới đây là hướng dẫn cơ bản để cài đặt reCAPTCHA trên trang web của bạn. Bạn có thể tìm thấy hướng dẫn tham khảo đầy đủ về trình bổ trợ PHP bên dưới.

Phía máy khách (Cách hiển thị hình ảnh CAPTCHA)

Nếu muốn sử dụng thư viện PHP để hiển thị tiện ích reCAPTCHA, bạn cần chèn đoạn mã này vào bên trong phần tử <form> nơi đặt tiện ích reCAPTCHA:

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

Với mã này, biểu mẫu của bạn có thể trông giống như sau:

  <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>

Hãy nhớ đặt $publickey bằng cách thay thế your_public_key bằng khoá công khai API của bạn.

Xin lưu ý rằng giá trị của thuộc tính "action" là "verify.php". Bây giờ, verify.php là tệp đích mà các giá trị của biểu mẫu này được gửi đến. Vì vậy, bạn sẽ cần một tệp verify.php ở cùng một vị trí với html của ứng dụng khách.

Hàm required_once trong ví dụ trên dự kiến recaptchalib.php ở cùng thư mục với tệp biểu mẫu của bạn. Nếu tệp nằm trong thư mục khác, bạn phải liên kết tệp một cách thích hợp. Ví dụ: nếu recaptchalib.php nằm trong thư mục có tên "captcha" ở cùng cấp với tệp biểu mẫu của bạn, hàm sẽ trông giống như sau: require_once('captcha/recaptchalib.php').

Phía máy chủ (Cách kiểm tra xem người dùng đã nhập đúng câu trả lời hay chưa)

Bạn nên đặt mã sau đây ở đầu tệp verify.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
  }
  ?>

Trong mã trên:

  • recaptcha_check_answer trả về một đối tượng cho biết người dùng có hoàn tất thành công thử thách hay không.
  • Nếu $resp->is_valid là đúng, thì thử thách xác thực bằng hình ảnh xác thực đã được hoàn tất đúng cách và bạn sẽ tiếp tục xử lý biểu mẫu.
  • Nếu $resp->is_valid sai, thì người dùng không cung cấp được văn bản hình ảnh xác thực chính xác và bạn nên hiển thị lại biểu mẫu để cho phép họ thử lại. Trong trường hợp này, $resp->error sẽ là mã lỗi và bạn có thể cung cấp mã này cho recaptcha_get_html. Khi bạn chuyển mã lỗi, chế độ kiểm soát reCAPTCHA sẽ hiển thị thông báo giải thích rằng người dùng đã nhập văn bản không chính xác và nên thử lại.
  • Lưu ý rằng mã này đang yêu cầu khoá riêng tư và bạn không nên nhầm lẫn khoá này với khoá công khai. Bạn nhận được khoá đó từ cùng một trang với khoá công khai.

    Ngoài ra, hãy đảm bảo biểu mẫu của bạn được thiết lập để lấy các biến biểu mẫu bằng $_POST, thay vì $_REQUEST và chính biểu mẫu đó đang sử dụng phương thức POST.

    Vậy là xong! reCAPTCHA hiện đã hoạt động trên trang web của bạn.

    Đọc thêm

  • Tuỳ chỉnh giao diện
  • Mẹo và nguyên tắc
  • Khắc phục sự cố
  • Hướng dẫn tham khảo về trình bổ trợ PHP

    Dưới đây là danh sách đầy đủ tất cả các phương thức của Trình bổ trợ reCAPTCHA PHP.

    Hàm recaptcha_get_html

    Hàm recaptcha_get_html hiển thị HTML hiển thị reCAPTCHA cho người dùng.

    recaptcha_get_html
    Thông số
    $pubkey – string. bắt buộc. Khoá công khai reCAPTCHA của bạn, từ Trang đăng ký API
    $error -- string. không bắt buộc (null là giá trị mặc định) Nếu bạn đặt chuỗi này, vùng reCAPTCHA sẽ hiển thị mã lỗi đã cho. Mã lỗi này là của ReCaptchaResponse->$error
    $use_SSL – boolean. không bắt buộc (sai là mặc định) Có nên sử dụng API dựa trên SSL không? Nếu bạn đang hiển thị một trang cho người dùng qua SSL, hãy nhớ đặt giá trị này là true (đúng) để hộp thoại lỗi không xuất hiện trong trình duyệt của người dùng.
    Giá trị trả về Một chuỗi ký tự chứa HTML cần đặt trên trang web.

    Hàm recaptcha_check_answer

    Sau khi người dùng điền vào biểu mẫu HTML, bao gồm câu trả lời của họ cho CAPTCHA, chúng tôi muốn kiểm tra câu trả lời của họ khi họ gửi biểu mẫu bằng cách sử dụng hàm recaptcha_check_answer. Câu trả lời của người dùng sẽ có trong hai trường biểu mẫu: recaptcha_challenge_fieldrecaptcha_response_field. Thư viện ReCAPTCHA sẽ gửi một yêu cầu HTTP đến máy chủ reCAPTCHA và xác minh câu trả lời của người dùng.

    recaptcha_check_answer
    Thông số
    $privkey – string. bắt buộc. Khoá riêng tư reCAPTCHA của bạn, từ Trang đăng ký API.
    $remoteip – string. required. Địa chỉ IP của người dùng, ở định dạng 192.168.0.1
    $Challenge – chuỗi. bắt buộc.
    Giá trị của trường biểu mẫu recaptcha_Challenge_field
    $phản hồi – chuỗi. bắt buộc Giá trị của trường biểu mẫu recaptcha_Response_field
    Giá trị trả về Một thực thể của lớp ReCaptchaResponse

    ReCaptchaResponse
    Trường
    $is_Valid – boolean reCAPTCHA có tin rằng câu trả lời là hợp lệ không?
    $error – chuỗi Nếu câu trả lời không hợp lệ, vấn đề là gì? Bạn có thể sử dụng mã lỗi này trong recaptcha_get_html
    Giá trị trả về HTML hoặc url thô để giải mã địa chỉ email, tuỳ thuộc vào chức năng của bạn.

    Ẩn thư

    Thư viện PHP reCAPTCHA có chứa các đường liên kết cho API Mailhide. API này cho phép bạn gói một email trong reCAPTCHA để ngăn những người gửi nội dung không liên quan nhìn thấy email đó: vui lòng kiểm tra...@example.com.

    Phần Mailhide của Thư viện PHP yêu cầu mô-đun mcrypt PHP.

    API Mailhide bao gồm 2 hàm recaptcha_mailhide_htmlrecaptcha_mailhide_url. Các hàm có cùng tham số. Phiên bản _html trả về HTML có thể đặt trực tiếp trên trang web của bạn. Phần tên người dùng của email được chuyển sẽ bị cắt bớt và được thay thế bằng một đường liên kết gọi Mailhide. Phiên bản _url cung cấp cho bạn URL để giải mã email và bạn có thể đặt email trong HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Thông số
    $pubkey – chuỗi Khoá công khai Mailhidden từ trang đăng ký
    $privkey – chuỗi Khoá riêng tư Mailhidden trên trang đăng ký
    $email – chuỗi Địa chỉ email bạn muốn ẩn.

    Ví dụ sau cho thấy cách sử dụng 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>