Desenvolvimento web

Usando a validação reCAPTCHA em PHP

Recaptcha
ReCAPTCHA é um serviço gratuito que protege sites de spam e abusos

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');

?>
Tags: , , , ,

Um comentário em “Usando a validação reCAPTCHA em PHP”

  1. Projetos acadêmicos usando Angular – Matheus Misumoto

    […] 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. […]

    Responder

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.