PHP로 reCAPTCHA 사용

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

reCAPTCHA PHP 라이브러리는 CAPTCHA를 봇의 악용을 막을 수 있습니다. 라이브러리는 reCAPTCHA API:

PHP와 함께 reCAPTCHA를 사용하려면 reCAPTCHA PHP를 다운로드하세요. 라이브러리를 사용하여 v3 지도에 통합할 수 있습니다. 거기에서는 하나의 파일 (recaptchalib.php)만 필요합니다. 다른 파일은 예시, 리드미, 법적 문제가 있으며 기능에는 영향을 미치지 않습니다.

빠른 시작

API 키를 신청한 후 사이트에 reCAPTCHA를 설치하기 위한 기본 안내는 다음과 같습니다. 전체 PHP 플러그인에 대한 참조 가이드는 아래에서 확인할 수 있습니다.

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

PHP 라이브러리를 사용하여 reCAPTCHA 위젯을 표시하려면 이 코드 스니펫을 <form> reCAPTCHA 위젯이 위치할 요소 배치:

  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를 다음으로 바꿔 $publickey를 설정하는 것을 잊지 마세요. API 공개 키입니다.

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

위 예시의 required_once 함수의 경우 Recaptchalib.php가 동일한 위치에 있을 것으로 예상합니다. 디렉터리를 양식 파일로 사용합니다. 다른 디렉터리에 있으면 적절하게 연결해야 합니다. 예를 들어 Recaptchalib.php가 '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 컨트롤에 사용자에게 텍스트를 잘못 입력했으므로 다시 시도해 주세요.
  • 이 코드는 private 키를 요청하므로 혼동해서는 안 됩니다. 확인할 수 있습니다 공개 키와 동일한 페이지에서 이 정보를 가져옵니다.

    또한 POST 대신 $_POST를 사용하여 양식 변수를 가져오도록 양식이 $_REQUEST를 사용해야 하고 양식 자체가 POST 메서드를 사용하고 있음을 확인합니다.

    이것으로 모든 작업이 완료되었습니다. 이제 사이트에서 reCAPTCHA가 작동할 것입니다.

    추가 자료

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

    다음은 reCAPTCHA PHP 플러그인의 모든 메서드의 전체 목록입니다.

    Recaptcha_get_html 함수

    recaptcha_get_html 함수는 reCAPTCHA를 표시하는 HTML을 표시합니다. 있습니다.

    recaptcha_get_html
    매개변수
    $pubkey -- 문자열입니다. 필요합니다. API 가입 페이지의 reCAPTCHA 공개 키
    $error -- 문자열입니다. 선택적 (기본값은 null임) 이 문자열이 설정되면 reCAPTCHA 영역에 오류 코드가 표시됩니다. 나타냅니다. ReCaptchaResponse->$error에서 가져온 오류 코드입니다.
    $use_ssl -- boolean. 선택사항 (기본값은 false) SSL 기반 API를 사용해야 할까요? 만약 SSL을 통해 사용자에게 알리려면 이 값을 true로 설정해야 합니다. 그래야 오류 대화상자가 표시되지 않습니다. 사용자의 브라우저에 표시됩니다.
    반환 값 웹페이지에 배치할 HTML이 포함된 문자열입니다.

    reCAPTCHA_check_answer 함수

    사용자가 보안문자에 대한 답변을 포함하여 HTML 양식을 작성하면 양식을 제출할 때 recaptcha_check_answer 함수를 사용하세요. 사용자의 답변은 두 개의 양식 필드에 표시됩니다. recaptcha_challenge_fieldrecaptcha_response_field 이 reCAPTCHA 라이브러리가 reCAPTCHA 서버에 HTTP 요청을 하고 사용자의 있습니다.

    recaptcha_check_answer
    매개변수
    $privkey -- 문자열입니다. 필요합니다. API 가입 페이지의 reCAPTCHA 비공개 키입니다.
    $remoteip -- 문자열. 필요합니다. 사용자의 IP 주소(192.168.0.1 형식)
    $challenge -- 문자열입니다. 필요합니다.
    양식 필드 reCAPTCHA_challenge_field의 값입니다.
    $response -- 문자열입니다. 필수 양식 필드의 Recaptcha_response_field의 값
    반환 값 ReCaptchaResponse 클래스의 인스턴스입니다.

    ReCaptchaResponse
    필드
    $is_valid -- boolean reCAPTCHA가 답이 타당하다고 생각했나요?
    $error -- 문자열 답변이 잘못되었다면 무엇이 문제였나요? 이 오류 코드는 reCAPTCHA_get_html에 사용됨
    반환 값 이메일 주소를 디코딩하는 HTML 또는 원시 URL(작업하는 항목에 따라 다름) 합니다.

    메일 숨기기

    reCAPTCHA PHP 라이브러리에는 Mailhide API에 대한 바인딩이 포함되어 있습니다. 이 API를 사용하면 이메일을 reCAPTCHA로 래핑하여 스팸 발송자가 이메일을 보지 못하게 할 수 있습니다. 시험...@example.com

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

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

    reCAPTCHA
    매개변수
    $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>