El captcha es una solución para prevenir que robots o usuarios mal intencionados acciones sobre formularios de datos y llenen las bases de datos como spam.
En este articulo les muestro una solucion facil.
Este captcha consiste en 2 numeros generados aleatoriamente y almacenados en variables de sesion, los cuales se le mostraran al usuario y se le pedira que ejecute una operacion sobre estos numeros, por ejemplo suma y en un campo del formulario debe ingresar el valor de la suma, de manera oculta al procesar el formulario se compara el resultado de la suma de los 2 numeros con el resultado del usuario para garantizar si el valor es correcto o no.
Si el resultado es correcto, procedemos a realizar cualquier accion, como guardar datos en la base de datos, etc.
Si el resultado es incorrecto, no hacemos nada y le notificamos al usuario que el captcha es incorrecto.
Archivo index.php
[code language=”html”] <?php session_start(); $_SESSION["num1"] = rand(0,10); $_SESSION["num2"] = rand(0,10); ?><!DOCTYPE html>
<html>
<head>
<title>Captcha Ejemplo – Evilnapsis</title>
</head>
<body>
<h1>Ejemplo de captcha</h1>
<form method="post" action="solve.php">
Resuelve la operacion <?php echo $_SESSION["num1"]; ?>+ <?php echo $_SESSION["num2"];?>:
<input type="text" name="captcha" required>
<input type="submit" value="Enviar">
</form>
</body>
</html>
[/code]
El archivo index.php contiene el formulario y tambien es donde se generan por primera vez los dos numeros aleatorios.
Archivo solve.php
[code language=”php”] <?php session_start(); if(isset($_SESSION["num1"]) && isset($_SESSION["num2"]) && isset($_POST["captcha"])){ $resp = $_SESSION["num1"]+$_SESSION["num2"]; $captcha = $_POST["captcha"]; if($resp==$captcha){ echo "Captcha Correcto"; }else{ echo "Captcha Incorrecto"; } } ?>[/code]
En el archivo solve.php se validan los datos y se comprueba la respuesta para saber si el usuario es o no un robot.
Con estos 2 archivos de código ejemplificamos lo que les explique.
Conclusion
Como veran es una forma fácil de evitar ataques de spam, también existen muchas otras soluciones que se pueden usar en diferentes casos.
Gracias, por el ejemplo, si funciona correctamente.
Gracias por tu comentario!! Saludos