reCAPTCHA: o que é e como usar
Publicado; 24/01/2011 Filed under: php 12 Comments »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 ocorre porque 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.
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 um captcha. 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!


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
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.
Caramba, eu nunca imaginei que isso serviria pra alguma coisa além de consumir o tempo alheio
Que bom que vc gostou, Otávio!
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?
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?
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.
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”");
}
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'] .
Opaaa…legal, não tinha me ligado nisso! Valeu ae…abs!
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é
você deve utilizar sua própria chave da API, solano. você está fazendo isso?