PHP로 reCAPTCHA 사용

중요: reCAPTCHA API 버전 1.0은 더 이상 지원되지 않습니다. 버전 2.0으로 업그레이드하세요. 자세히 알아보기

reCAPTCHA PHP 라이브러리는 PHP 웹사이트에 보안문자를 간단하게 입력하여 봇의 악용을 방지하는 데 도움을 줍니다. 라이브러리는 reCAPTCHA API를 래핑합니다.

PHP에서 reCAPTCHA를 사용하려면 reCAPTCHA PHP 라이브러리를 다운로드하세요. 여기에서는 파일 1개만 필요합니다 (recaptchalib.php). 다른 파일은 예, 리드미 및 법적 항목이며 기능에는 영향을 미치지 않습니다.

빠른 시작

API 키를 등록한 후 사이트에 reCAPTCHA를 설치하는 방법은 다음과 같습니다. PHP 플러그인에 대한 전체 참조 가이드는 아래에서 확인할 수 있습니다.

클라이언트 측 (보안문자 이미지가 표시되도록 하는 방법)

PHP 라이브러리를 사용하여 reCAPTCHA 위젯을 표시하려면 reCAPTCHA 위젯이 배치될 <form> 요소 내부에 이 코드 스니펫을 삽입해야 합니다.

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

이 코드를 사용하면 양식이 다음과 같을 수 있습니다.

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

your_public_key를 API 공개 키로 바꿔 $publickey를 설정해야 합니다.

'action' 속성의 값은 'verify.php'입니다. 이제 verify.php가 이 양식의 값이 제출되는 대상 파일이 됩니다. 따라서 클라이언트 html과 동일한 위치에 verify.php 파일이 있어야 합니다.

위 예의 required_once 함수는 reCAPTCHA.php가 양식 파일과 동일한 디렉터리에 있을 것으로 예상합니다. 이 디렉터리가 다른 디렉터리에 있다면 적절하게 연결해야 합니다. 예를 들어 reCAPTCHA가 양식 파일과 같은 수준에 있는 'captcha'라는 디렉터리에 있으면 함수는 다음과 같습니다. require_once('captcha/recaptchalib.php')

서버 측 (사용자가 올바른 답변을 입력했는지 테스트하는 방법)

다음 코드를 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
  }
  ?>

위 코드에서 다음이 수행됩니다.

  • recaptcha_check_answer는 사용자가 챌린지를 성공적으로 완료했는지 여부를 나타내는 객체를 반환합니다.
  • $resp->is_valid이 true이면 보안문자 테스트가 올바르게 완료된 것이므로 양식 처리를 계속 진행해야 합니다.
  • $resp->is_valid이 false인 경우 사용자가 올바른 보안문자 텍스트를 제공하지 못한 경우 양식을 다시 표시하여 사용자가 다시 시도할 수 있도록 해야 합니다. 이 경우 $resp->errorrecaptcha_get_html에 제공할 수 있는 오류 코드입니다. 오류 코드를 전달하면 reCAPTCHA 컨트롤에 사용자가 텍스트를 잘못 입력했으며 다시 시도해야 한다고 설명하는 메시지가 표시됩니다.
  • 이 코드는 공개 키와 혼동해서는 안 되는 비공개 키를 요청합니다. 이 키는 공개 키와 동일한 페이지에서 가져옵니다.

    또한 $_REQUEST 대신 $_POST를 사용하여 양식 변수를 가져오도록 양식이 설정되어 있고 양식 자체에서 POST 메서드를 사용 중인지 확인합니다.

    이제 사이트에서 reCAPTCHA가 작동할 것입니다.

    추가 자료

  • 디자인 맞춤설정
  • 도움말 및 가이드라인
  • 문제 해결
  • PHP 플러그인 참조 가이드

    다음은 reCAPTCHA PHP 플러그인의 전체 메서드가 포함된 목록입니다.

    reCAPTCHA 함수

    recaptcha_get_html 함수는 사용자에게 reCAPTCHA를 제시하는 HTML을 표시합니다.

    recaptcha_get_html
    매개변수
    $pubkey -- 문자열. 필수 항목입니다. API 가입 페이지의 reCAPTCHA 공개 키
    $error -- 문자열입니다. 선택사항입니다 (기본값: null). 이 문자열이 설정되면 reCAPTCHA 영역에 지정된 오류 코드가 표시됩니다. ReCaptchaResponse->$error에서 발생한 오류 코드입니다.
    $use_ssl -- 부울. 선택사항 (기본값: false) SSL 기반 API를 사용해야 하나요? SSL을 통해 사용자에게 페이지를 표시하는 경우 사용자의 브라우저에 오류 대화상자가 표시되지 않도록 true로 설정해야 합니다.
    반환 값 웹페이지에 배치할 HTML이 포함된 문자열입니다.

    reCAPTCHA 함수

    사용자가 보안문자에 대한 답변을 포함하여 HTML 양식을 작성한 후 recaptcha_check_answer 함수를 사용하여 양식을 제출할 때 사용자의 답변을 확인하려고 합니다. 사용자의 답변은 recaptcha_challenge_fieldrecaptcha_response_field의 두 가지 양식 필드에 입력됩니다. reCAPTCHA 라이브러리는 reCAPTCHA 서버에 HTTP 요청을 하고 사용자의 답변을 확인합니다.

    recaptcha_check_answer
    매개변수
    $privkey -- 문자열이며 필수 항목입니다. API 가입 페이지에 등록된 reCAPTCHA 비공개 키
    $remoteip -- 문자열이며 필수입니다. 192.168.0.1 형식의 사용자 IP 주소입니다.
    $challenge -- 문자열. 필수.
    양식 필드 returntcha_challenge_field 값
    $response -- 문자열. 필수 양식 필드 reCAPTCHA reetcha_response_field의 값
    반환 값 ReCaptchaResponse 클래스의 인스턴스

    ReCaptchaResponse
    필드
    $is_유효한 값: 부울 reCAPTCHA에서 답변이 유효하다고 판단했나요?
    $error -- 문자열 답변이 잘못된 경우 어떤 문제가 있었나요? 이 오류 코드는 Recaptcha_get_html에서 사용할 수 있습니다.
    반환 값 호출한 함수에 따라 이메일 주소를 디코딩할 HTML 또는 원시 URL.

    메일 숨기기

    reCAPTCHA PHP 라이브러리에는 Mailhide API 결합이 포함되어 있습니다. 이 API를 사용하면 스팸 발송자가 이메일을 reCAPTCHA로 래핑할 수 있으므로 exam...@example.com은 스팸 발송자가 이메일을 볼 수 없습니다.

    PHP 라이브러리의 Mailhide 부분에는 PHP mcrypt 모듈이 필요합니다.

    Mailhide API는 두 가지 함수 recaptcha_mailhide_htmlrecaptcha_mailhide_url로 구성됩니다. 함수의 매개변수가 동일합니다. _html 버전은 웹페이지에 직접 삽입할 수 있는 HTML을 반환합니다. 전달된 이메일의 사용자 이름 부분은 잘리고 Mailhide를 호출하는 링크로 대체됩니다. _url 버전은 이메일을 디코딩할 수 있는 URL을 제공하며 이메일을 HTML에 배치할 수 있도록 사용자에게 맡깁니다.

    remembertcha_mailhide_url / restricttcha_mailhide_html
    매개변수
    $pubkey -- 문자열 가입 페이지의 Mailhide 공개 키
    $privkey -- 문자열 가입 페이지의 Mailhide 비공개 키
    $email -- 문자열 숨기려는 이메일 주소입니다.

    다음 예는 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>