reCAPTCHA: o que é e como usar

errar é humano?

sabe aquelas letrinhas de confirmação? o nome daquilo é CAPTCHA (sim, é uma sigla). significa “Completely Automated Public Turing test to tell Computers and Humans Apart”, ou, em bom brasilês, “teste de Turing público completamente automatizado para distinguir computadores e humanos”. basicamente, digitando aquilo, você confirma que você é um ser humano, e não um bot spamzeiro. isso é útil porque resolver esses captchas ainda é algo muito custoso e pouco confiável fazer isso automaticamente pelos computadores atuais.

o conceito é simples: um servidor tem uma imagem com letras e, possivelmente, linhas, barras, cores e outras coisas que dificultam a análise automática. o servidor, claro, sabe o que tem escrito na imagem, pois foi ele que gerou a imagem OU alguém cadastrou tudo manualmente. entretanto, para um programa de computador que tem a imagem, é trabalhoso ou demorado analisar a imagem e distinguir o que é letra e o que é só uma linha colocada ali para atrapalhar. mas, para pessoas, é um trabalho bem simples.

assim, toda vez que alguém enviou um formulário no seu site e aquelas letrinhas foram digitadas corretamente, por exemplo, você tem uma boa confiabilidade de que era realmente uma pessoa. obviamente, cuidados adicionais podem e devem ser tomados.

reCAPTCHA

pesquisando na internet, você vai encontrar diversas formas diferentes de como implementar seu próprio gerador de CAPTCHAs. eu vou recomendar a você que não faça isso. quero dizer, é legal ter seu próprio algoritmo, mas ainda melhor é contribuir para a humanidade.
segundo o site do reCAPTCHA, diariamente, 200 milhões dessas imagens são resolvidas diariamente por pessoas. isso dá em torno de 150 mil horas de trabalho – todos os dias. em um outro lado dessa nossa história, livros são escaneados e transformados em arquivos digitais. entretanto as ferramentas OCR (Optical Character Recognition – reconhecimento ótico de caractere) disponíveis atualmente não são muito confiáveis para transformar essas imagens em texto. elas tem alguma confiabilidade, mas existem situações e situações em que elas não vão ser capazes de reconhecer essas palavras satisfatoriamente.

viu só?

lançando mão de um conceito chamado de human(-based) computation, o pessoal do google Carnegie Mellon University teve uma idéia muito boa: cada palavra que não pode ser lida corretamente pela ferramenta OCR é usada como parte de um captcha. a outra parte é uma palavra gerada automaticamente pelo computador, de modo que ele saiba ao menos o que significa uma das partes do captcha e possa validar a resposta do usuário com alguma confiabilidade. assim, as pessoas estariam contribuindo, com uma pequena parcela do seu tempo (cerca de 10 segundos) para a digitalização de livros. e foi pra isso que o reCAPTCHA foi criado.

atualmente, edições antigas do New York Times e livros do google books fazem parte do projeto. e para ajudar, basta usá-lo no seu site. sites grandes, como o facebook e craigslist usam o reCAPTCHA, então dá pra se ter uma boa confiança no serviço. o serviço também possui uma versão áudio, o que favorece a acessibilidade do seu site (obviamente, acessibilidade envolve muitas outras coisas).

apenas para complementar, tem um vídeo muito interessante do google edu sobre human computation.

e neste endereço, você pode consultar a API do reCAPTCHA para diversas linguagens. aqui, usarei php e me basearei fortemente no tutorial disponibilizado pela documentação oficial.

obtendo uma chave da API

através desta página, você se cadastra e recebe um par de chaves – uma public key e uma private key, só suas, guarde-as com carinho – para utilizar os serviços do reCAPTCHA. é necessário ter uma conta google. você pode cadastrar o domínio localhost para realizar testes.

código de exemplo

baixe recapcha php lib, a biblioteca para php disponível aqui. descompacte o arquivo “recaptchalib.php” na pasta do seu projeto. não se preocupe, ela usa uma licença bastante permissiva, então você pode incluí-la em algum projeto sem precisar divulgar seu código-fonte. então, segue um formulário de exemplo:

<html>
    <body>
      <form method="post" action="verificar.php">
	Algum texto: <input type="text" name="texto">
        <?php
          require_once('recaptchalib.php');
          $publickey = "SUA_CHAVE_PUBLICA";
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>
    </body>
</html>

isso aí vai gerar um formulario com um campo reCAPTCHA. lembre-se de configurar sua chave pública no local correto. abaixo, segue o código do arquivo verificar.php

<?php
  require_once('recaptchalib.php');
  $privatekey = "SUA_CHAVE_PRIVADA";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    echo "O reCAPTCHA nao foi informado corretamente. Tente novamente. ".
         "(mensagem do reCAPTCHA: " . $resp->error . ")";
  } else {
    echo "reCAPTCHA informado corretamente!";
  }

  echo "<br><a href=\"formulario.php\">voltar</a>";

?>

basicamente, é isso! mas, claro, além do básico, você pode fazer muitas outras configurações, como alterar o tema do box do reCAPTCHA, customizar seu css, alterar o idioma, dentre outras coisas, como pode ser visto aqui. segue uma versão um pouco modificada do box, traduzida para português e com o tema “white”. como você é uma pessoa esperta, vai logo perceber que você pode utilizar seus próprios formulários para consumir a API do reCAPTCHA.

<html>
    <script type="text/javascript">
      var RecaptchaOptions = {
       lang : 'pt',
       theme : 'white'
      };
    </script>
    <body>
      <form method="post" action="verificar.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "SUA_CHAVE_PUBLICA";
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>
    </body>
</html>

espero que tenham gostado e bons hacks!


12 Comentários on “reCAPTCHA: o que é e como usar”

  1. LidianyCs disse:

    humm eu detesto digitar esses captchas, nunca enxergo direito!
    ODEIO ENTÃO QUANDO TEM DUAS PALAVRAS!!!
    Mas acho que vou usar em alguma coisa…gostei! =D

    • cacovsky disse:

      e quando a gente erra isso? quer dizer o quê?🙂

      eu não gosto de digitar essas coisas, mas sabendo que pra alguma coisa tá servindo, menos mal.

  2. Otávio disse:

    Caramba, eu nunca imaginei que isso serviria pra alguma coisa além de consumir o tempo alheio😀

  3. marcos disse:

    cara… eu coloco a função echo recaptcha_get_html($publickey); mas não me retorna nada na tela… coloco perfeitamente minha publickey no lugar que é preciso.. mas na verdade num aparece nenhum modelo do recaptcha na tela…:/ sabe oq pode ser?

  4. marcos disse:

    bom.. deu certo… mas precisei baixar o arquivo recaptchalib.php da versão phpbb… com a versão php não funciona… mas agora tenho outro problema… toda hora dá que as letras que eu inseri estão erradas… ¬¬ sabe oq pode ser?

    • cacovsky disse:

      o problema pode ser outro, na configuração do seu php ou do seu servidor web. já conseguiu resolver? posta aí o código que a gente pode dar uma olhada.

  5. João disse:

    Eu tentei implementar o recaptcha em um form e a página de processamento é externa. Como faço para verificar na página se o código foi digitado corretamente ou não e “printar” em cima do iframe do captcha a mensagem de erro (em caso de erro)? Eu inseri o código que verifica se as palavras foram digitadas corretamente, mas aí a mensagem aparece só na outra página, e eu queria que primeiro o captcha fosse verificado, ou seja, dentro da seguinte lógica:

    if($resp->is_valid) {
    header(“Location: processa_form.php”);
    } else {
    header(“Location: $_SERVER[‘PHP_SELF’].”?captcha=erro””);
    }

    • cacovsky disse:

      se eu bem entendi sua pergunta, é só verificar antes de imprimir o formulário do captcha se existem os elementos $_POST[‘REMOTE_ADDR’], $_POST[‘recaptcha_challenge_field’] e $_POST[‘recaptcha_response_field’] .

  6. Solano disse:

    Cacovsky
    seguindo pela api do google está sempre retornando q a chave é invalida
    vc sabe o q pode ser????
    o q vc testou vc subiu para um serv online??
    até


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s