Validar formularios sin CAPTCHA

No sé si os pasa a todos pero cada vez que tengo que rellenar un formulario y tengo que poner el puñetero código CAPTCHA me las deseo, a veces es realmente complicado y creo a mi modo de ver innecesario. Ahora veamos como validar nuestros formularios y no morir en el intento. Eso sí, más complicado y más trabajo ya lleva, pero creo que el usuario realmente lo agradece.

Esta entrada es la suma de todo lo que he ido encontrando en internet más una aportación mia.

Primer paso: todo lo que validemos con javascript validarlo del lado del servidor tambien.

Los robots se saltan estan validaciones javascript por eso es necesario validar todos los campos del lado del servidor, y no con ajax sino realmente antes de insertarse en la BD o enviarse el mail. Ojo cuidado con las comillas simples y dobles, palabras reservadas de sql y etiquetas html.

Paso dos: Utilizar variables aleatorias y de sessión en campos hidden.

O sea podemos incluir este script en nuestro formulario
1 $numeroaleatorio = rand(0,$_SESSION['id_dinamico']);
2
$_SESSION['id_control'] = md5($_SESSION['
id_dinamico'].CONSTANTE_CONTROL);

Y luego creamos dos input tipo hidden, uno con el valor aleatorio y otro con una valor codificado en md5 que sea una mezcla entre la variable de session dinámica, el valor aleatorio y una constante definida por nosotros.

Todo esto lo comprobamos del lado del servidor y si no corresponden los valores es una máquina. Nota opcionalmente si la variable $_SESSION['id_control'] la inicializamos a 0 en el servidor evitaremos que se recargue más de 2 veces un mismo formulario, muy bueno para los usuarios de click fácil.

Paso tres: creamos un campo de texto escondido "con estilos" o sea style="display:none" llamado email.

Los robots a todos estos campos le asignan un valor de correo correcto, si en la comprobación es un email válido entonces es una máquina.

Paso cuatro: crearnos un arreglo con palabras prohibidas.

Nos creamos un arreglo con palabras que no queremos en nuestro formulario y ponemos una tolerancia, si la cantidad de palabras no deseada supera el porcentaje de tolerancia entonces no hacemos nada con los datos del formulario.

1 function tieneContenidoInadecuado($valor_campo,$porcentaje_tolerancia){
2
$novalido = "palabras no deseadas";
3
$trozos_no_validos = explode(" ", $novalido);
4
$trozos_campo = explode(" ",
$valor_campo);
5
$contador_malas = 0;
6
foreach ($trozos_campo as $clave=>$palabra) {
7 if(
in_array($palabra,$trozos_no_validos))
8
$contador_malas++;
9 }
10
$porcentaje = (int)(($contador_malas*100)/
count($trozos_campo));
11 if (
$porcentaje >
$porcentaje_tolerancia)
12 return
TRUE;
13 return
FALSE;
14 }


Paso cinco (opcional): si no deseamos que en algún campo existan enlaces o url, podemos usar los scripts de entradas anteriores para eliminarlos.

Comentarios