
O CAPTCHA, sigla em inglês para Teste de Turing Público Completamente Automatizado para Distinguir entre Computadores e Pessoas (Completely Automated Public Turing test to tell Computers and Humans Apart), é um dos principais recursos usados para garantir que o acesso a um sistema ou a uma página é feito por humanos, e não por robôs.
Certamente você já teve que preencher um CAPTCHA ao enviar um formulário ou fazer login. É uma medida de segurança para evitar spam, decriptografia de senhas e sobrecarga do sistema. Um dos serviços mais populares é o reCAPTCHA, gerenciado pelo Google. Neste post você verá como implantá-lo no seu site usando linguagem PHP.
Primeiramente, é necessário registrar seu site no reCAPTCHA. Este registro lhe dará uma chave pública e uma chave privada, que serão usadas para verificação dos formulários com o teste de desafio. Depois disso, você colocará o código para colocar o desafio CAPTCHA dentro do seu formulário, entre as tags <form></form>
. Este código deverá conter a sua chave pública.
Ao submeter o formulário, caso a resolução do desafio tenha sido positiva, será criado uma variável g-recaptcha-response
, com uma chave única. Esta chave deverá ser confrontada com a sua chave privada, usando a API do Google reCAPTCHA, chamada pelo código:
// json-decode(): Transforma o JSON de retorno da API em variáveis do PHP
// $secretKey: sua chave secreta do reCAPTCHA
// $_POST['g-recaptcha-response']: a chave gerada pela resposta ao reCAPTCHA pelo formulário
$RetornaCaptcha = json_decode( file_get_contents( 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secretKey . '&response=' . $_POST['g-recaptcha-response'] ) );
Agora é só usar o parâmetro success
da variável (no caso deste exemplo $retornaCaptcha) para determinar o que será exibido no caso do reCAPTCHA válido ou inválido.
$RetornaCaptcha = json_decode( file_get_contents( 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secretKey . '&response=' . $_POST['g-recaptcha-response'] ) );
if($RetornaCaptcha->success){
echo "reCAPTCHA válido!";
} else {
echo "reCAPTCHA inválido!";
}
Recentemente fiz um experimento usando a ferramenta reCAPTCHA em um simples formulário de login usando PHP. O código completo está disponível no meu GitHub, mas abaixo segue como foi feita a verificação. Você pode testá-lo, usando (ou não) o usuário test
e a senha test123
.
<?php
// Get a key from https://www.google.com/recaptcha/admin/create
$publicKey = '';
$secretKey = '';
if(!empty($_POST['g-recaptcha-response']) && !empty($_POST['username']) && !empty($_POST['password'])){
$RetornaCaptcha = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secretKey . '&response=' . $_POST['g-recaptcha-response']));
// Captcha válido
if($RetornaCaptcha->success){
if($_POST['username'] == "test" && $_POST['password'] == "test123"){
// Nome de usuário e senha corretos
include('success.php');
exit();
} else {
// Nome de usuário e senha incorretos
$msg = 'Username and/or password incorrect. Try again!';
}
// Captcha inválido
} else {
$msg = 'The reCAPTCHA is incorrect. Try again!';
}
}
// Caso algum campo ou o Captcha não tenha sido preenchido
else if(!empty($_POST)) {
if(empty($_POST['g-recaptcha-response'])){
$msg .= 'Please solve the reCAPTCHA<br />';
}
if(empty($_POST['password']) || empty($_POST['password'])){
$msg .= 'Username and password required';
}
}
include('form.php');
?>