Como usar o reCAPTCHA com PHP

Importante: a versão 1.0 da API reCAPTCHA não é mais compatível. Faça upgrade para a versão 2.0. Saiba mais

A biblioteca reCAPTCHA para PHP oferece uma maneira simples de inserir um CAPTCHA em seu site PHP, o que ajuda você a impedir que os bots abusem dele. A biblioteca encapsula os API reCAPTCHA.

Para usar o reCAPTCHA com PHP, faça o download do reCAPTCHA PHP biblioteca. Você só precisará de um arquivo (recaptchalib.php). Os outros arquivos são exemplos, leia-me e coisas legais, mas não afetam a funcionalidade.

Início rápido

Depois de se inscrever para as chaves de API, veja abaixo as instruções básicas para instalar o reCAPTCHA no seu site. Um guia de referência para o plug-in PHP pode ser encontrado abaixo.

Lado do cliente (como fazer a imagem CAPTCHA aparecer)

Se quiser usar a biblioteca PHP para exibir o widget reCAPTCHA, você precisará inserir este snippet de código no <form> em que o widget reCAPTCHA será colocado:

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

Com o código, o formulário ficaria assim:

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

Não se esqueça de definir $publickey substituindo your_public_key por sua chave pública de API.

O valor do atributo "action" atributo é "verify.php". Agora, Verify.php é o arquivo de destino em que os valores deste formulário são enviados. Você precisa de um arquivo check.php no mesmo local que o html do cliente.

A função required_once no exemplo acima espera que recaptchalib.php esteja no mesmo como o arquivo de formulário. Se ele estiver em outro diretório, vincule-o corretamente. Por exemplo, se recaptchalib.php estiver no diretório chamado "captcha" que está no mesmo que o arquivo de formulário, a função terá esta aparência: require_once('captcha/recaptchalib.php'):

No servidor (como testar se o usuário inseriu a resposta certa)

O código a seguir deve ser colocado na parte superior do arquivo 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
  }
  ?>

No código acima:

  • recaptcha_check_answer retorna um objeto que representa se o usuário concluiu o desafio com sucesso.
  • Se $resp->is_valid for verdadeiro, o desafio do captcha foi concluído corretamente e você deverá continuar o processamento do formulário.
  • Se $resp->is_valid for falso, o usuário não forneceu o captcha correto e você deve exibir o formulário novamente para permitir uma nova tentativa. Nesse caso, $resp->error será um código de erro que pode ser fornecido a recaptcha_get_html. Transmitir o código de erro faz o controle reCAPTCHA mostrar uma mensagem explicando que o usuário digitou o texto incorretamente e deve tentar novamente.
  • Observe que esse código está solicitando a chave private, que não pode ser confundida. com a chave pública. Essa informação está na mesma página da chave pública.

    Verifique também se o formulário está configurado para receber as variáveis do formulário usando $_POST, em vez de $_REQUEST e que o próprio formulário está usando o método POST.

    É isso! O reCAPTCHA já deve estar funcionando no seu site.

    Leitura adicional

  • Personalizar a aparência
  • Dicas e diretrizes
  • Solução de problemas
  • Guia de referência do plug-in para PHP

    Veja abaixo uma lista abrangente de todos os métodos do plug-in reCAPTCHA para PHP.

    A função recaptcha_get_html

    A função recaptcha_get_html exibe o HTML que apresenta o reCAPTCHA para as usuário.

    recaptcha_get_html
    Parâmetro
    $pubkey -- string. obrigatórios. Sua chave pública reCAPTCHA, da página de inscrição da API
    $error -- string. opcional (o padrão é nulo) Se essa string for definida, a área reCAPTCHA vai mostrar o código de erro. dado. Esse código de erro vem de ReCaptchaResponse->$error
    $use_ssl -- boolean. opcional (falso é o padrão) Devo usar a API com base em SSL? Se você está exibindo uma página usuário por SSL, defina-o como "true" para que uma caixa de diálogo de erro não aparecer no navegador do usuário.
    Valor de retorno String com HTML a ser colocado na página da Web.

    A função recaptcha_check_answer

    Depois que o usuário preencheu o formulário HTML, incluindo a resposta para o CAPTCHA, nós querem verificar a resposta quando enviarem o formulário usando o função recaptcha_check_answer. A resposta do usuário estará em dois campos de formulário: recaptcha_challenge_field e recaptcha_response_field. A A biblioteca reCAPTCHA faz uma solicitação HTTP ao servidor reCAPTCHA e verifica os dados responder.

    recaptcha_check_answer
    Parâmetro
    $privkey -- string. obrigatórios. Sua chave privada reCAPTCHA, da página de inscrição na API.
    $remoteip -- string. obrigatórios. O endereço IP do usuário, no formato 192.168.0.1
    $challenge -- string. obrigatórios.
    O valor do campo do formulário recaptcha_challenge_field
    $response -- string. obrigatório O valor do campo do formulário recaptcha_response_field
    Valor de retorno Uma instância da classe ReCaptchaResponse

    ReCaptchaResponse
    Campo
    $is_valid -- boolean O reCAPTCHA acreditava que a resposta era válida?
    $error -- string Se a resposta era inválida, qual era o problema? Esse código de erro pode ser usado em recaptcha_get_html
    Valor de retorno O HTML ou URL bruto para decodificar o endereço de e-mail, dependendo de qual você função chamou.

    Correir

    A biblioteca reCAPTCHA para PHP inclui vinculações para a API Mailhide. Isso A API permite que você empacote um e-mail em um reCAPTCHA para evitar que criadores de spam o vejam: exame...@example.com.

    A parte Mailhide da biblioteca PHP requer o módulo mcrypt do PHP.

    A API Mailhide consiste em duas funções: recaptcha_mailhide_html e recaptcha_mailhide_url. As funções têm os mesmos parâmetros. A versão _html retorna HTML que podem ser colocados diretamente na sua página da Web. A parte do nome de usuário do e-mail que é passado é truncado e substituído por um link que chama o Mailhide. A versão _url fornece o URL decodificar o e-mail e deixar que você o coloque em HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Parâmetro
    $pubkey -- string A chave pública do Mailhide da página de inscrição
    $privkey -- string A chave privada do Mailhide da página de inscrição
    $email -- string O endereço de e-mail que você quer ocultar.

    O exemplo a seguir mostra como usar o 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>