logoSudo-Captcha

Sudoku de ejemplo Presentamos una nueva idea sobre códigos de seguridad de muy fácil implementación. Nos hemos basado en el juego de los sudokus... en concreto, en los Sudokus de colores.

No nos interesa que existan distintos niveles de dificultad, ya que la intención es que se resuelva un acertijo fácil, pero si fuera posible, difícil para los robots que envían el odioso spam. La idea es mostrar un código de seguridad con un número de nuevo dígitos sin repetir en donde el cero debe reemplazarse por el número que falte y que resuelva el sudoku.

Funcionamiento

Los sudokus normales tienen una resolución muy básica, llenando las casillas vacías con números entre el uno y el nueve (1..9); sin repetirse en la misma fila, la misma columna o la misma zona (grupo de tres filas por tres columnas). Para este caso tan solo usaremos una zona y solo una casilla por resolver, pero podemos usar una variante donde se use una fila o columna, como el ejemplo que vemos al principio del siguiente párrafo.

Sudoku de ejemplo Nótese que el tamaño de las casillas y el tipo de sudoku puede configurarse, igual que la paleta de colores, y con una simple reordenación obtenemos distintas imágenes, aunque su resolución siga siendo única; evidentemente la elección de colores será del gusto del "consumidor".

Resumiendo, tendremos un campo que hay que editar para resolver el sudoku. La edición podrá hacerse directamente sobre el campo mencionado o también podemos implementar un sistema de pulsaciones tanto de las casillas del sudoku como de unos selectores de colores debidamente mostrados e informando del modo de uso.

La implementación

Para la selección de colores, al tratarse de imágenes svg hemos usado colores definidos de fácil interpretación como "red" (rojo), "yellow" (amarillo), etc.

El array que hemos usado para los colores es el siguiente:

$sudo_paleta = array("white", "red", "blue", "green", "yellow", "aqua", "lime", "pink", "darkorange", "magenta");

Este código en lenguaje php puede con poco código generar el mismo array en lenguaje javascript:

echo "var sudo_paleta = [\"".explode("\", \"", $sudo_paleta)."\"];";

Teniendo esta definición en un fichero aparte, tan solo tenemos que usar una instrucción include del lenguaje php para disponer de nuestra paleta de colores.

Sobre la generación de la imagen, puede hacerse insertando el código en el formulario también con una instrucción include, indicando previamente la clave y el tamaño de la casilla ($t), e incluyendo la paleta y el fichero de la imagen. Para la imagen que vemos al lado de esta imagen (pulsando sobre ella puede verse ampliada), hemos usado las siguientes instrucciones en lenguaje php:

<?
	$clave_sudoku = "345012789";
	$sudo_t = 10;
	include("sudo.captcha.paleta.txt");
	include("sudo.captcha.zonal.svg.txt");
?>

Resumiendo, aparte del fichero con la paleta de colores, para generar las imágenes con los sudokus, necesitamos de cuatro ficheros más; el primero para generar la imagen con la etiqueta img, y que se llama "sudo.captcha.svg.php", cuyo código mostramos a continuación:

<?
	include("sudo.captcha.paleta.txt");
	$clave_sudoku = $_GET["sudoku"];

	if (strlen($clave_sudoku) > 9) $clave_sudoku = substr($clave_sudoku, 9);
	else	while(strlen($clave_sudoku) < 9) $clave_sudoku .= "0";

	if (isset($_GET["t"]))
		$sudo_t = (int) $_GET["t"];
	else
		$sudo_t = 30;
	if (isset($_GET["m"]))
		$sudo_m = $_GET["m"];
	else
		$sudo_m = "z";
	
	if (strtolower($sudo_m) == "h")
		include("sudo.captcha.horizontal.svg.txt");
	elseif (strtolower($sudo_m) == "v")
		include("sudo.captcha.vertical.svg.txt");
	else
		include("sudo.captcha.zonal.svg.txt");
	header("Content-type: image/svg+xml");
?>

Los otros tres ficheros generan las tres variantes de los sudokus, a saber:

Para mostrar la paleta selectora de colores simplemente debemos recorrer el primer array mencionado ($paleta) y escribir el índice junto a un recuadro con el color asociado. Solo nos queda generar el número sudo-captcha y elegir el color activo en el recuadro de selección.

Los Sudokus (Captchas)

Para generar los números cualquier sistema podría ser válido, pero al tener que obtenerse en el servidor usaremos primitivas del lenguaje php. Desordenaremos un array de los nueve números de un sudoku resuelto y cambiaremos uno de esos números elegidos al azar por el cero. El código es el que sigue:

function generadorSudoku()	{
	$n = str_shuffle("123456789");
	$sudoku = str_replace(rand(1, 9), "0", $n);
	return $sudoku;
}

A continuación mostramos 10 sudokus obtenidos con este sistema:

160384295:
719630248:
235408967:
135497208:
987465021:
873901456:
307126849:
365780219:
642538107:
810375246:

Sólo mos queda crear dos ficheros para incluírlos en el formulario de la página web que queremos proteger y en la página receptora. Los requisitos básicos serán dos: el método del formulario será "POST", y deberá estar iniciada una sesión para guardar y rescatar el sudoku generado.

A continuación mostramos un formulario de ejemplo:

Un formulario cualquiera :

Sudo-Captcha (código de seguridad) refrescar código *

Nota: El Sudoku se resuelve dejando sólo números entre el uno (1) y el nueve (9) sin repetir, o sea que debemos cambiar el número cero (0) por el que corresponda.

|

Si envía el formulario con el código correcto verá el mensaje "El código de seguridad es correcto"; y en caso de que no esté correctamente, el mensaje será otro: "El sudo-captcha no está resuelto". Pero pueden existir otros casos como por ejemplo recibir el código desde una página sin sesión abierta.

Otra forma de intentar hacer vulnerable el sistema es enviar tanto el sudoku como el valor "repe" modificándolos con valores que sepamos que se resuelven... por ejemplo: "012345678" => "912345678". Se puede probar esta opción pulsando sobre el siguiente botón: ...

Insertando el código

Solo nos queda crear una carpeta en nuestro servidor, copiar los archivos necesarios y editar una línea del fichero donde tenemos nuestro formulario incluyendo el fichero con el sudo_captcha (sudo.captcha.form.txt). También debemos incluír en el receptor del mismo el control del código (sudo.captcha.control.txt).

Adicionalmente, en el fichero de control debemos considerar que el número de error del código sea cero.

Notas adicionales

La primera página web donde hemos implementado el sistema tiene también una versión en inglés por lo que hemos tenido que hacer algunas pequeñas modificaciones para adaptar los distintos textos. Esos textos originales se incluyen en el fichero sudo.captcha.mensajes.txt, La traducción ayudado del traductor de Google está en este fichero de aquel dominio: sudo.captcha.mensajes.txt.

Hemos tenido que editar los dos ficheros mencionados para indicar la ruta nueva del fichero de mensajes traducido, y también hemos necesitado insertar más de una línea de código, en concreto dos líneas, la primera incluyendo el fichero de mensajes y la otra la que estaba incluyendo el código del formulario o del control del mismo, habiendo previamente eliminado esas instrucciones de esos ficheros.

Zona de comentarios

Esta pagina aún no tiene comentarios.





emoticón negrita cursiva subrayado web foto

Estamos modificando el sistema de seguridad para el envío de comentarios debido al constante envío de spam que estamos bloqueando.

Nota importante: Si va a escribir un comentario, debe poner en el recuadro "Código de seguridad" lo que aparece en color rojo en el párrafo anterior.

Evaluación

Valoración de esta página: (pagina.Sudo-Captcha) valor

Valoración evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar

Respuesta: Zona de mensajes (proceso de evaluación)

Copyright © 2002-2024 www.pepemolina.com
RSS rss | Ver Mapa del sitio