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.