Como criar um captcha simples em PHP para proteger formulários

Implementar um captcha simples em PHP pode ser suficiente para bloquear envios automatizados em formulários. Abaixo está um exemplo funcional utilizando GD e sessões.

O Problema

Formulários sem validação estão sujeitos a spam automatizado. Bots conseguem enviar dados repetidamente, comprometendo a aplicação.

A Solução

Gerar uma imagem dinâmica com um código aleatório e validar esse código via sessão no backend.

HTML do formulário

<div class="col-lg-4 col-lg-offset-4 text-center">
    <img src="captcha.php" alt="código captcha"/>
    <label for="captcha">Digite o Código</label><br/>
    <input type="text" name="captcha" class="form-control"/>
</div>

Arquivo captcha.php

<?php
session_start();
 
// Gera código aleatório
$codigoCaptcha = substr(md5(time()), 0, 6);
 
// Armazena na sessão
$_SESSION['captcha'] = $codigoCaptcha;
 
// Cria imagem base
$imagemCaptcha = imagecreatefrompng("fundocaptch.png");
 
// Carrega fonte
$fonteCaptcha = imageloadfont("anonymous.gdf");
 
// Define cor do texto
$corCaptcha = imagecolorallocate($imagemCaptcha, 190, 190, 190);
 
// Escreve o texto na imagem
imagestring($imagemCaptcha, $fonteCaptcha, 15, 5, $codigoCaptcha, $corCaptcha);
 
// Define header
header("Content-type: image/png");
 
// Renderiza imagem
imagepng($imagemCaptcha);
 
// Libera memória
imagedestroy($imagemCaptcha);
?>

Validação no backend

<?php
session_start();
 
if ($_SESSION['captcha'] != $_POST['captcha']) {
    echo '<div class="alert alert-info" role="alert">
            <strong>Atenção</strong> O código de segurança está incorreto. Tente novamente.
          </div>';
    die();
}
?>

Conclusão

Esse modelo de captcha é simples e funcional para cenários básicos. Para aplicações mais críticas, considere soluções mais robustas como reCAPTCHA, mas para uso interno ou sistemas pequenos, essa abordagem resolve bem.

Deixe um comentário

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

Rolar para cima