Captcha o Código Anti-Spam en Zend Framework



Hosting barato
VN:F [1.9.20_1166]
Rating: 10.0/10 (1 vote cast)

Para los que no sepan qué es el código Anti-Spam, comentar que es la imagen que aparece en algunos formularios y que contiene una serie de caracteres que debemos introducir antes de realizar el envío de datos de dicho formulario al servidor. Este código se utiliza para evitar que se monten robots contra nuestro formulario, y lo utilice repetidamente de manera que nos llene nuestra BBDD o una cuenta de correo de información basura.

Dicho esto, vamos a ver los pasos qué los pasos a seguir para implementar nuestro propio código anti-span en nuestros formularios.


Lo primero que tenemos que hacer es decidir por qué tipo de adaptador utilizar, ya que Zend Framework nos ofrece la posibilidad de utilizar varios de ellos. Tenemos la posibilidad de generar el código anti-spam mediante código ascii a través de la librería Zend_Captcha_Figlet o la típica imagen donde está el código anti-spam , a través de la librería Zend_Captcha_Image.

Ejemplo de lo que nos daría Zend_Captcha_Figlet

Captcha o código anti-spam hecho con Zend_Captcha_Figlet

Ejemplo de lo que nos daría Zend_Captcha_Image

Captcha o código anti-spam hecho con Zend_Captcha_Image

A continuación vamos a explicar las distintas partes del código que pondremos después de cómo se haría la inserción de dicho código anti-spam en nuestra aplicación y la validación del mismo.

El objeto que vamos a utilizar, como hemos comentado anteriormente es Zend_Captcha_Image, y su inicialización es de la siguiente manera:

<?php
$captcha = new Zend_Captcha_Image(array(
'name' => 'foo',
	'wordLen' => 5,
	'font' => 'VeraMono.ttf',
	'height' => 50,
	'width' => 120,
	'imgDir' => './images/captcha',
	'imgUrl' => 'http://localhost:8080/test/images/captcha',
	'timeout' => 300
));
?>

Donde:

  • name: Es el nombre de la variable de la caja de texto donde vamos a introducir el código en el formulario
  • wordLen: Longitud de la palabra que se generará como código anti-spam
  • font: Fuente que se utilizará para generar el codógio anti-spam. Ojo, hay que indicar la ruta donde se encuentra la fuente. Esta fuente debe ser “ttf”
  • heigth: Altura de la imagen que contendrá el código anti-spam
  • width: Ancho de la imagen que contendrá el código anti-spam
  • imgDir: Ruta relativa donde se almacerán las imágenes generadas con el código anti-spam.
  • imgUrl: Ruta absoluta donde se encuentran las imágenes generadas con el código anti-spam.

El código que utilizaremos para generar el código anti-spam y si posterior validación será el siguiente:

<?php
<?php
	require_once 'Zend/Captcha/Image.php';
	require_once 'Zend/View.php';

	//Creamos una instancia de Zend_View
	$view = new Zend_View();
//Instanciamos el objeto relacionado con la creación del código anti-spam
	$captcha = new Zend_Captcha_Image(array(
		'name' => 'foo',
		'wordLen' => 5,
		'font' => 'VeraMono.ttf',
		'height' => 50,
		'width' => 120,
		'imgDir' => './images/captcha',
		'imgUrl' => 'http://localhost:8080/test/images/captcha',
		'timeout' => 300
	));

	$id = $captcha->generate();
 	$captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_'.$id);

//Para accede dentro de la sesión y recuperar el código, necesitamos un iterador para ello
	$captchaIterator = $captchaSession->getIterator();

//Validamos si es la primera vez que accedemos o no, para la inicialización de la variable en sesión que contendrá el código anti-spam
	if (!isset($_SESSION['codigo'])){//Primera vez
    	    $_SESSION['codigo'] =  $captchaIterator['word'];
	}

	//Visualizamos el código anti-spam en nuestra vista
	echo $captcha->render($view);

//Si se ha producido el envío de información al servidor, entramos a validar código anti-spam introducido con el que tenemos en sesión
	if (!empty($_POST)){
		if ($_SESSION['codigo'] == $_POST['foo']){
		    echo "Validado el código!!!<br />";
//Aquí sería el momento de redireccionar a otra funcionalidad al haber validado correctamente el código
		}else{
			echo "Código NO validado<br />";
//Actualizamos el código anti-spam en sesión para la posterior validación.
$_SESSION['codigo'] = $captchaIterator['word'];
		}
	}
?>
<form method="post" action = "test1.php">
	<input type = "text" id = "foo" name = "foo"></input>
	<input type = "submit" id = "submit">
</form>
?>

Si queremos que nuestro script anterior se pueda probar repetidas veces, bastaría con hacer una pequeña modificación en el momento en el que actualizamos el código anti-spam una vez que se ha detectado que el código introducido no es válido.
Del script anterior modificaríamos…

<?php
	if (!empty($_POST)){
		if ($_SESSION['codigo'] == $_POST['foo']){
		    echo "Validado el código!!!<br />";
//Aquí sería el momento de redireccionar a otra funcionalidad al haber validado correctamente el código
		}else{
			echo "Código NO validado<br />";
		}
//Actualizamos el código anti-spam en sesión para la posterior validación.
$_SESSION['codigo'] = $captchaIterator['word'];
	}
?>

¡¡¡Y esto es todo por el momento!!!

¡¡¡Cualquier comentario, mejora, o ayuda sobre este tema siempre será bienvenido!!!

Por cierto, si alguien tiene o sabe donde hay fuentes libres para captcha o códigos anti-spam, si quiere, que ponga la url en los comentarios a este artículo, así nos servirá de ayuda para todos. ¡¡¡Gracias!!!

Captcha o Código Anti-Spam en Zend Framework, 10.0 out of 10 based on 1 rating
Comparte y disfruta:

Si te ha gustado este artículo, te puede interesar ...



Hosting barato

One comment

  1. ginebras premium
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)

    Tenemos que tener cuidado con este punto. El spam es un problema que nos termina afectando a todos.

    Gracias por el artículo, muy detallado y documentado.

    Un saludo.
    Andres.

Escribe un comentario


× nueve = 72

Puede usar HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>