Protegendo formulários em PHP com CAPTCHA

Veja como proteger os formulários do seu site contra spam e robôs maliciosos

26/01/2024

Protegendo formulários em PHP com CAPTCHA

Protegendo formulários em PHP com CAPTCHA

Introdução: O Que é CAPTCHA?

CAPTCHA é um sistema que verifica se o usuário é uma pessoa real e não um robô, usado em formulários online para prevenir spam e abusos automatizados.

Neste tutorial, ensinaremos como implementar o Google reCAPTCHA em um site PHP, abrangendo desde a obtenção das chaves necessárias até a validação do reCAPTCHA no seu formulário.

Obtendo Chaves do reCAPTCHA para Seu Site PHP

Para integrar o reCAPTCHA do Google no seu site, você precisa de duas chaves específicas, através dos seguintes procedimentos:

  • Visite o site do Google reCAPTCHA. Se necessário, faça login com sua conta Google.
  • Clique em "+" para adicionar um novo site.
  • No campo 'Rótulo', insira um nome para o seu site.
  • Escolha 'reCAPTCHA v3' porque ele verifica automaticamente os usuários.
  • Em 'Domínios', adicione o endereço do seu site, como "seudominio.com.br". Substitua isso pelo domínio real do seu site.
  • Aceite os termos de serviço e clique em 'Enviar'.

Anote as 'Chave do Site' e a 'Chave Secreta', pois você precisará utilizá-las em seu site.

Criando um Formulário HTML com Google reCAPTCHA v3

Agora que você tem as chaves do reCAPTCHA, o próximo passo é integrá-lo ao seu formulário HTML. Primeiro, crie seu formulário com os campos necessários. Em seguida, adicione o script do reCAPTCHA fornecido pelo Google, substituindo CHAVE_DO_SITE pela chave que você obteve.


<form action="enviar.php" method="post">
	<label for="nome">Nome:</label>
	<input type="text" id="nome" name="nome" required><br><br>

	<label for="email">E-mail:</label>
	<input type="email" id="email" name="email" required><br><br>

	<label for="mensagem">Mensagem:</label>
	<textarea id="mensagem" name="mensagem" required></textarea><br><br>

	<!-- Campo oculto para o token do reCAPTCHA -->
	<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">

	<input type="submit" value="Enviar">
</form>

<script src="https://www.google.com/recaptcha/api.js?render=CHAVE_DO_SITE"></script>
<script>
	grecaptcha.ready(function() {
		grecaptcha.execute('CHAVE_DO_SITE', {action: 'submit'}).then(function(token) {
			document.getElementById('g-recaptcha-response').value = token;
		});
	});
</script>

Script PHP para Processamento e Validação do Formulário

Depois de criar o formulário HTML, o próximo passo é escrever o script PHP que irá processar os dados do formulário e validar a resposta do reCAPTCHA.

O script verificará a resposta do reCAPTCHA para garantir que o usuário seja um humano real. Substitua CHAVE_SECRETA pela Chave Secreta do reCAPTCHA e nome@dominio.com.br pelo e-mail que receberá os dados do formulário.

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Captura de dados do formulário
    $nome = strip_tags(trim($_POST["nome"]));
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $mensagem = trim($_POST["mensagem"]);
    $recaptcha_response = $_POST['g-recaptcha-response'];

    // Verificação do reCAPTCHA
    $url = "https://www.google.com/recaptcha/api/siteverify";
    $data = [
        'secret' => 'CHAVE_SECRETA',
        'response' => $recaptcha_response,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    ];

    $options = [
        'http' => [
            'header' => "Content-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query($data)
        ]
    ];

    $context  = stream_context_create($options);
    $response = file_get_contents($url, false, $context);
    $responseKeys = json_decode($response, true);

    if ($responseKeys["success"]) {
        // O usuário é um humano, processar o formulário
        $para = 'nome@dominio.com.br'; // Email do administrador do site
        $assunto = 'Nova mensagem do formulário de contato';
        $conteudo_email = "Nome: $nome\n";
        $conteudo_email .= "Email: $email\n\n";
        $conteudo_email .= "Mensagem:\n$mensagem\n";

        // Cabeçalhos do e-mail
        $headers = "From: $para\r\n";
        $headers .= "Reply-To: $email\r\n";

        // Envio do e-mail
        if (mail($para, $assunto, $conteudo_email, $headers)) {
            echo "Obrigado pelo seu contato, $nome!";
        } else {
            echo "Erro ao enviar a mensagem.";
        }
    } else {
        // A verificação do reCAPTCHA falhou, tratar como suspeita de bot
        echo "Falha na verificação do reCAPTCHA.";
    }
} else {
    // Método de requisição inválido
    echo "Método de requisição inválido.";
}
?>

Considerações Finais

Este tutorial mostrou como adicionar o reCAPTCHA a um site usando PHP. Lembre-se, o exemplo dado é um ponto de partida. Adapte o código conforme necessário, alterando os campos do formulário ou adicionando suas próprias validações.

Veja também nosso tutorial sobre como implementar o reCAPTCHA em sites WordPress.

Domínios hospedados
Clientes satisfeitos