El script consta de un sencillo archivo en php al que he llamado invisiblecaptcha.php:
5 | $_SESSION [ 'invisibleCaptcha' ] = md5( rand( 0, 100000 ) ); |
6 | header( 'Content-type: text/javascript' ); |
7 | echo ( 'document.write( "<input type=\'hidden\' name=\'invisibleCaptcha\' value=\' ' . $_SESSION [ 'invisibleCaptcha' ] . '\'/>");' ); |
Se trata que desde nuestro html llamemos a este archivo como si se tratara de un javascript. Este genera un nuevo campo para el formulario llamado ‘invisibleCaptcha’ y oculto que contiene un valor aleatorio generado cada vez que se carga la página.
Esto se hace para diferenciar a un robot de una persona. Los robots no suelen ejecutar el javascript, y aunque lo hagan no lo hacen a la vez que el html y por tanto el archivo guardará valores diferentes para cada uno y podremos saber que se trata de un robot.
Un inconveniente sí que tiene, y es que para los usuarios que no tengan integrado javascript en su navegador o lo tengan desactivados, el formulario nunca llegará a su destino. Esto se puede solucionar añadiendo un mensaje de noscript diciéndole que lo active para poder enviar el formulario.
Ahora vamos con la integración en el HTML:
2 | < input name = "uno" type = "text" /> |
3 | < input type = "submit" value = "Enviar" /> |
4 | < script type = 'text/javascript' src = 'invisiblecaptcha.php' ></ script > |
Este es un formulario de ejemplo sencillo que llama como script al php que hemos creado y que genera un nuevo cambio oculto para el usuario con el valor guardado en la SESSION.
Después, para saber si el formulario es de un usuario, cuando lo verifiquemos solamente tendremos que ver si es igual $_SESSION['invisibleCaptcha'] y $_POST['invisibleCaptcha'] (también valdría en GET) después de haber iniciado la sesión con session_start().
Espero que les sea de ayuda para poder evitar el spam sin incordiar al usuario.
No hay comentarios:
Publicar un comentario