Agregar protección y validación de formularios web con Captcha
Muchas veces tenemos un sitio web de negocios y estamos cansados de recibir spam en la página de Contacto, Contáctenos, o como sea llamada. ¿Es posible evitar el spam? ¿Es possible evitar que las máquinas zombies envien correos? Si, podemos detener estás tácticas.
Usted necesita instalar Captcha, en cual genera una imagen para verificar que es una persona la que está escribiendo realmente el formulario y no un sistema automatizado. Hay muchas librerías para PHP e incluso para páginas .ASPX. Yo recomiendo la librería PHP reCAPTCHA, la cual proporciona una forma simple de instalar CAPTCHA en sus formularios PHP. Esto puede hacer detener a los motores automatizados de spam. Esto funcionará con la API de reCAPTCHA.
Paso # 1: Obtener la librería reCAPTCHA
Visitando el sitio web de reCAPTCHA y registrándose para obtener la API key (esto es gratis). Usted tendrá su llave publica y llave privadas.
Paso # 2: Descargar e instalar reCAPTCHA PHP
Descargar la líbreria reCAPTCHA desde Google code repo:
$ cd /tmp
$ wget http://recaptcha.googlecode.com/files/recaptcha-php-1.10.zip
Unzip recaptcha-php-1.10.zip, ingresando:
$
unzip
recaptcha-php-1.10.zip
Finalmente, copiar recaptchalib.php al directorio donde usted tiene sus formularios web. Por ejemplo: si usted posee la página contacto.php en /var/www/html, entonces debe copiar recaptchalib.php de la siguientes forma:
$ cp /tmp/recaptcha-php-1.10/recaptchalib.php /var/www/html
Paso # 3: Probar y verificar
Crear un script php como el siguiente:
<html><head> <title>Formulario Simple de Correo</title> </head><body> <script> function checkForm() { if (document.forms.myphpform.elements['yname'].value.length == 0) { alert('Por favor ingrese un valor para el campo "Nombre"'); return false; } if (document.forms.myphpform.elements['email'].value.length == 0) { alert('Por favor ingrese un valor para el campo "Email"'); return false; } if (document.forms.myphpform.elements['message'].value.length == 0) { alert('Por favor ingrese un valor para el campo mensaje "Message"'); return false; } return true; } </script> <form action="?done=1" method="post" name="myphpform" onSubmit="return checkForm()" > <table border=0> <tr><td>Su Nombre:</td> <td> <input type="text" name="yname" size="50" maxlength="50" value="" /></td> </tr><tr> <td>Su Email:</td> <td> <input type="text" name="email" size="50" maxlength="50" value="" /></td> </tr><tr> <td>Mensaje:</td> <td> <input type="text" name="message" size="50" maxlength="50" value="" /></td> </tr><tr> <td>¿Es usted un humano?</td><td> <?php @require_once('recaptchalib.php'); $publickey = "YOUR-PUBLIC-KEY"; $privatekey = "YOUR-PRIVATE-KEY"; $resp = null; $error = null; if ($_POST["submit"]) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if ($resp->is_valid) { $to="usted@ejemplo"; $subject="Feedback from ejemplo"; $body=" Mensaje via webform: Nombre: " .$_POST["yname"] . "\n Email: " .$_POST["email"] . "\n Message: " .$_POST["message"] . "\n"; /* enviando correo */ mail($to,$subject,$body); echo " Correo Enviado! "; exit(1); } else { echo "Lo sentimos pero no ha colocado el texto correctamente! Intente nuevamente..."; } } echo recaptcha_get_html($publickey, $error); ?> <td/> </tr> <tr> <td> </td> <td> <input type="submit" name="submit" value="submit" /></td> </tr> </table> </form> </body> </html>
Comments (10)
ola men seguro que este es 1codigo de proteccion
genial ahora hagan un manual de como tener sexo !!!!!!!!!
solo quiero comprobar mi correo
solo comprobar mi correo
thnx bro
buen tuto
lo voy a probar, gracias
Hola! muy buena la info!
me sale el siguiente error:
is_valid) { $to=»usted@ejemplo»; $subject=»Feedback from ejemplo»; $body=» Mensaje via webform: Nombre: » .$_POST[«yname»] . «\n Email: » .$_POST[«email»] . «\n Message: » .$_POST[«message»] . «\n»; /* enviando correo */ mail($to,$subject,$body); echo » Correo Enviado! «; exit(1); } else { echo «Lo sentimos pero no ha colocado el texto correctamente! Intente nuevamente…»; } } echo recaptcha_get_html($publickey, $error); ?>
a EDGAR eso que muestras no es un error es parte del código a ver si lo compilaste mal donde lo miras? tienes apache o xampp puesto para ver php¿ en fin si puedo ayudarte estaré atento al mail . Muy buen tutorial excelente gracias. Yo ahroa uso catcha helper de #CodeIgniter por que recaptcha me mosquea que a veces el servidor se satura y te hace recargar por que no te muestra el captcha en fin es una opción como bien explicas. Gracias por dejarme comentar.