Usando a validação reCAPTCHA em PHP

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');
?>
[…] Gostou? Também leia meu post sobre meu arquivo de projetos academicos em Angular e como usar a validação ReCAPTCHA em PHP. […]
[…] As atividades aconteceram durante o curso de Sistemas para Internet da Faculdade de Tecnologia do Estado de São Paulo. Alguns dos outros projetos já publicados neste blog foram um sistema de controle de hemocentro em Haskell e o uso da validação reCAPTCHA em PHP. […]