Contenido

Añade un Captcha maquero a tus aplicaciones web

20 May

+ 17

Actualmente los captchas son un problema para los usuarios de Internet y aunque cada vez es más normal ver este sistema como control de SPAM de nuestras aplicaciones, cada vez hay más problemas con ellos. Quizas la solución a nuestros problemas la haya traido Apple a nuestras puertas con el iPhone y su sistema de unlock.

slidecaptcha

Alex Boone ha desarrollado Slider, una versión de este sistema en Javascript usando jQuery. La verdad es que está muy conseguido y el resultado es bastante sorprendente, solo nos falta adaptarlos a nuestras aplicaciones web.

Como una aproximación, he montado un pequeño script que nos convertirá todos los elementos <input class=”slider” /> de nuestra aplicación en un Slide. Algo que nos permitirá mejorar la usabilidad de nuestro captcha.

¿Que necesito?

Implementación

Para hacerlo más o menos bien, tendremos que utilizar 3 lenguajes de programación.

1) PHP

En PHP generaremos el secureKey y lo alojaremos en sessión para ser comprobado posteriormente.

<?php
session_start();

function randomText($length) {
    $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
    for($i=0;$i<$length;$i++) {
      $key .= $pattern{rand(0,35)};
    }
    return $key;
}

$_SESSION["secureKey"] = randomText(6);
?>

2) Javascript

Ahora ya tenemos la secureKey en sessión, hemos de relacionarla con nuestro captcha, para ello usaremos un poco de javascript.

//Javascript
$(document).ready(function(){
	var secureKey = '<?=$_SESSION["secureKey"]?>‘;
	$(’input.slider’).each(function(x,el){
		// Recipiente
		$(el).before(’<div id=”slider_’+$(el).attr(”id”)+’”></div>’);

		//Slider
		new Slider(’slider_’+$(el).attr(”id”),{
			message: $(el).val(),
			color: “green”,
			handler: function(){
				$(el).val(secureKey);
			}
		}).init();

		//Ocultamos el input
		$(el).css(”display”, “none”);
	});
});

Como podemos ver, montamos la secureKey de Javascript a partir de los datos almacenados en $_SESSION, así mostraremos el valor que se ha de contrastar en siguientes pasos.

3) HTML

Para que el Javascript detecte el input que deseamos convertir en Slider, tendremos que declarar el elemento de una forma concreta.

//HTML
<input name="slide_captcha" type="text" class=”slider” value=”BOT” title=”Deslizame para activar” />

Recepción de datos

Al igual que cualquier otro elemento de un formulario, el Slide será tratado en el servidor de la misma forma, salvo que este será comprobado con el valor almacenado previamente en sessión.

<?php
session_start();
if ($_SESSION["secureKey"] != $_POST["slide_captcha"]) {
	die(”Eres un bot”);
} else {
	die(”NO eres un bot”);
}
?>

Aclaración

He cambiado el post, por que el anterior era erroneo y no funcionaba, oldlastman tenía razón y me he visto obligado a reescribirlo. Siento las molestias.

Actualización

Visto la repercusión que está teniendo este sistema de “captcha”, tanto por mail como comentarios, he decidido crear un pequeño plugin para sustituir el botón de submit de nuestros formularios de comentarios. El sistema en sí, es muy simple incluso me planteé 2 veces si hacer un plugin o simplemente explicar como añadir el código, pero por comodidad para todos vosotros, aqui lo teneis :D

SlideSubmit

Este sistema no es apto para sustituir a los captchas actuales (por desgracia), ya que este sistema expone al usuario la secureKey a los bots encargados de llenarme de SPAM. Habrá que buscar alguna otra forma si queremos deshacernos del sistema actual.

Está simpático pero, corrígeme si me equivoco: Tenía pensado que los spamers accedían a los formularios con robots, los cuales accederán al html plano sin javascript ni css… incluso en casos mas puñeteros tienen incorporados sus propios form.submit(). Ante lo anterior comentado…un captcha visual+jquery… no sé, me parece que no serviría no?

Un saludo

@oldlastman: Toda la razón. He pensado en que los usuarios sin javascript lo vieran y no supusiera un obstaculo y me he olvidado de que los robots de spam forman parte de este grupo :P

Muchas gracias por el comentario, ya está corregido :D

Saludos

Muy original la verdad, aunque me suena bastante desconocido para muchos usuarios si se piensa en algo masivo y sobre todo bastante hackeable por un bot.

@Jonathan Muszkat: El desconocimiento por parte del usuario es similar al de los captchas en su momento.

Lo de que es hackeable, pues sí. Pero como alternativa está chula :D

Saludos Andres, se ve hermoso pero para los que no sabemos nada de programacion es muy dificil aplicarlo a nuestro blog.

No hay la opcion de un plugin o algo mas facil.

Saludos.

muy bonito, y supongo que funcionara bien para el blog ocasional que no este bajo ataque organizado de bots spammers, porque en ese caso estoy seguro que tomaria solo unos minutos escribir algo que se saltara este “captcha”

Esto sirve como submit, no como captcha. Es muy fácilmente hackeable.

@Mundano: Explica porfavor como puede ser Hackeado, se ve interesante pero tambien hay que ver si en verdad cumple con su proposito, que seria el de ’sustituir’ al CAPTCHA convencional.

La verdad no entiendo muy bien las instrucciones :S donde debo copiar este cpdigo exactamnte si uso wordpress?

Saludos

Hola. De verdad que esta aplicacion es genial.

Jon, y qué es lo que funciona en IE7???

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo