NovaMonoFix
Errores PHP
X
Usuario
Password
0 FPS

Captchas (1 Introducción)

03 de Diciembre del 2011 por Josep Antoni Bover, 0 visitas, 0 comentarios, 0 votos
Categorías : PHP, JavaScript, Programación, HTML.
La web está en segundo plano, animación en pausa.
Cargando animación...
Captchas (1 Introducción)

Hoy en día quien no ha tenido que lidiar con un captcha, y quien no ha fallado más de una vez en su validación?

Los captchas más utilizados en la actualidad se basan en una imagen que contiene texto distorsionado de alguna forma, que a veces resulta imposible incluso para un ser humano de identificar.

En la mayoría de casos el captcha se utiliza para proteger páginas web que tienen una sección de mensajes para que a nadie se le ocurra hacer una aplicación que mande mensajes de spam, o en servidores de descarga directa tipo fileserver y demás para evitar ataques que puedan colapsar sus servidores a base de descargar miles de ficheros a la vez.

Pero cuando llega un punto en que ni nosotros mismos somos capaces de validar un captcha, vale la pena utilizar ese sistema? yo creo que no. Por ello voy a intentar hacer una serie de tutoriales sobre cómo podemos construir nuestros captchas para que sean mas amigables.

Obviamente los captchas que a nosotros nos cuestan de validar son por norma los más seguros, pero hasta que punto necesitamos tanta seguridad?

Por ejemplo en esta página web tengo una sección donde se pueden enviar mensajes y luego pueden ser vistos por todos los usuarios. Necesito una protección hasta tal punto que incomode a un usuario para escribir un simple mensaje? yo creo que no.

En primer lugar la gente que se dedica a mandar spam por las razones que sean, es obvio que no son unos cracks de la programación (de ser así probablemente estarían haciendo otro tipo de cosas), y aunque lo sean, invertir decenas de horas en descifrar un sistema de seguridad para mandar spam a una única pagina web, no creo que les valga la pena. En definitiva lo que buscan es difundir su spam en el máximo de medios posibles, por lo que no les vendrá de una página web.

También nos podemos encontrar algún hacker con malas ideas que se fija en nuestra página web por la razón que sea, y decide probar suerte, en cuyo caso podemos tener otros métodos aparte del captcha para darnos cuenta de ello. Por ejemplo si tenéis una página web que no recibe muchos mensajes, pongamos una media de 10 al día, pero un día recibe 100 o 200 es que algo raro está pasando, por lo que nos podemos hacer un simple código que nos avise por email si algo así sucede, para proceder a desactivar el sistema de mensajería y tomar medidas contra el ataque.

Para cada caso en concreto hay que pensar bien que defensas debemos desplegar, y sobretodo tener en mente que el usuario de a pie no tiene la culpa por lo que no debemos hacerle pasar por muchas dificultades, o en caso contrario puede que decida no molestarse en escribir el mensaje.

En este tutorial vamos a empezar por crear un captcha súper simple únicamente utilizando JavaScript, y veremos cómo podemos validarlo por otros medios como los que podrían utilizar los spamers.

Código de un captcha en JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var Valor1 = 0;
var Valor2 = 0;
/* Función que genera dos valores aleatorios */
function GenerarCaptcha() {
Valor1 = 1 + Math.floor(Math.random() * 100);
Valor2 = 1 + Math.floor(Math.random() * 100);
document.getElementById("Valor1Captcha").innerHTML = Valor1;
document.getElementById("Valor2Captcha").innerHTML = Valor2;
document.getElementById("ResultadoCaptcha").value = "";
}
/* Función que comprueba que el resultado sea la suma de los dos valores generados */
function ValidarCaptcha() {
if (document.getElementById("ResultadoCaptcha").value == (Valor1 + Valor2)) {
alert("Captcha validado");
GenerarCaptcha();
}
else {
alert("El valor introducido no es válido.");
}
}
/* Función que ejecuta el código del cuadro de texto ConsolaJavaScript */
function ConsolaJavaScript() {
eval(document.getElementById("ConsolaJavaScript").value);
}

Ejemplo :

0 + 0 = Pulsa intro una vez introducido el resultado.

En el momento que un atacante vea el código JavaScript del captcha vera que puede sortearlo de varias formas, a continuación os he dejado una caja de texto que permite ejecutar código JavaScript, introducid la siguiente línea y pulsad intro :

Hack para el captcha
1
document.getElementById("ResultadoCaptcha").value = (Valor1 + Valor2); ValidarCaptcha();

Este cuadro de texto permite ejecutar funciones JavaScript

Como podéis ver ha resultado muy sencillo saltarse el captcha mediante JavaScript. La gente que se dedica a enviar spam imagino que modifican una copia del código de algún navegador por ejemplo Firefox, y esto les permite ejecutar código JavaScript de forma automatizada, por lo que este captcha resulta totalmente ineficiente.

De hecho para hacer un captcha hay que utilizar lo menos posible JavaScript, y programar todas sus partes sensibles en un lenguaje de servidor como PHP.

Y con esto terminamos por hoy, en la siguiente entrega veremos cómo crear un captcha similar a este pero utilizando PHP de forma que será mas difícil de hackear. Como siempre podéis ver el ejemplo simplificado online, o descargar el ejemplo para vuestro ordenador.

Siguiente tutorial : Captchas (2 Captcha básico con php).