Aplica a: Web Hosting y WordPress Hosting con sitios en HTML/PHP · Tiempo estimado: 10 min
¿Qué vas a lograr?
Agregar un captcha a tu formulario de contacto para protegerlo de bots y envíos automáticos no deseados.
Antes de empezar
Este código no es compatible con formularios de SitioSimple. Si usás SitioSimple, revisá las opciones de integración de captcha disponibles para esa plataforma — consultá el artículo SitioSimple — Crear y editar formularios de contacto.
Qué es un captcha
Un captcha es una prueba de seguridad que verifica si quien completa el formulario es una persona o un bot. Muestra una imagen con caracteres distorsionados que el usuario debe ingresar correctamente — los robots no pueden superar esta prueba, lo que protege el formulario de spam automático.
Pasos
Necesitás crear dos archivos en tu servidor: uno con el formulario HTML/PHP y otro que genera la imagen del captcha.
Archivo del formulario (contacto.html o contacto.php)
Pegá este código en tu archivo de formulario, reemplazando http://www.tudominio/ok.html por la URL de tu página de confirmación:
<?php
session_start();
$Captcha = (string) $_POST["CAPTCHA_CODE"];
if(sha1($Captcha) != $_SESSION["CAPTCHA_CODE"]) {
echo "<p style='color: #ff0000;'><strong>El código de validación no ha sido ingresado o es incorrecto.</strong></p>";
} else {
header ("Location: http://www.tudominio/ok.html");
}
?>
<form name='enviar' method='POST' action='<?php echo $PHP_SELF ?>'>
<table>
<tr><td><label>Código de seguridad:</label></td></tr>
<tr><td><img src="captcha.php" /></td></tr>
<tr><td><input type="text" name="CAPTCHA_CODE" style="width: 50px;" /></td></tr>
<tr><td><input type="submit" name="enviar" value="Enviar Mensaje" /></td>
<td><input type="reset" name="enviar" value="Borrar datos" /></td></tr>
</table>
</form>
Archivo que genera la imagen del captcha (captcha.php)
Creá un archivo llamado captcha.php en la misma carpeta y pegá este código:
<?php
session_start();
$captchaCode = substr(sha1(microtime() * mktime()), 0, 6);
$_SESSION['CAPTCHA_CODE'] = sha1($captchaCode);
$img = imagecreatetruecolor(70, 25);
$bgColor = imagecolorallocate($img, 230, 230, 230);
$stringColor = imagecolorallocate($img, 90, 90, 90);
$lineColor = imagecolorallocate($img, 245, 245, 245);
imagefill($img, 0, 0, $bgColor);
imageline($img, 0, 5, 70, 5, $lineColor);
imageline($img, 0, 10, 70, 10, $lineColor);
imageline($img, 0, 15, 70, 15, $lineColor);
imageline($img, 0, 20, 70, 20, $lineColor);
imageString($img, 5, 8, 5, $captchaCode, $stringColor);
header("Content-type: image/png");
imagepng($img);
?>
Subí ambos archivos al servidor por FTP dentro de la carpeta public_html.
