Captcha en PHP

por

Quién no se ha preguntado nunca que serán esas odiosas letras que nos hacen escribir y que ,a menudo no se distingue que pone, cada vez que queremos registrarnos en algún sitio o hacer alguna operación.

Todos nos hemos preguntado si de verdad servirán para algo. Pues bien, la verdad es que si que nos sirven, de hecho es una parte muy importante de toda web ya que es una medida de seguridad bastante efectiva aunque no infalibre contra ataques de creación masiva de usuarios o de envio de mensajes por ejemplo si pensamos por ejemplo en facebook. Pues bien, estas letras que nos hacen introducir son los llamados captchas.

Cualquiera que tenga una web en la que los usuarios puedan realizar operaciones debería de implementar estos captchas a pesar de que de cara al usuario sean odiosos, sobre todo cuando ni nosotros mismos sabemos lo que trae.

Para llevar a cabo la implantación de estos captchas es necesario que tengamos en nuestro proyecto incluida la librería "jpgraph_antispam.php" de jpgraph.

Para generar los captchas utilizaremos el siguiente código PHP que deberemos de incluir en un archivo php llamado genera_captcha.php en nuestro caso:


<?php
include("./lib/jpgraph/src/jpgraph_antispam.php");
session_start();
$spam = new AntiSpam();
$_SESSION['tmptxt']= $spam->Rand(5);
$spam->Stroke(); 
?>

Este será el código que generará los captchas y del que nos valdremos para las validaciones.

El siguiente paso será incluir esos captchas en nuestro código html. En nuetro caso tendremos un form de la siguiente forma:


<form name="formulario" action="register.php" method="post">

<img id='imagen_captcha' src='genera_captcha.php' width='100' height='30'> 
<img src='./images/recarga.jpg' title="Actualiza" onclick="refresca_captcha()">


<input type="submit" value="enviar" name="enviar"/>

</form>

De esta forma, incluimos el captcha como una simple imagen que el usuario puede ver sin problema. Además, si nos fijamos, hemos puesto una función javascript llamado refresca_capcha() que se lanza con le evento click sobre otra imagen que no es más que la típica imagen de recargar.

captcha

El código de esta función sería el siguiente:


function refresca_captcha(){
		
var obj=document.getElementById("imagen_captcha");
if (!obj) obj=window.document.all.cap;
if (obj){
obj.src= "genera_captcha.php?" + Math.random()  ;
}
}

Esta función hace que se regenere la imagen mostrada en el captcha y, por supuesto, la variable que contiene las letras correctas de éste para su posterior validación una vez enviemos el formulario.

Como es obvio, debemos de comparar los datos introducidos con los correctos del captcha para comprobar que todo sea correcto. Esta operación se hace una vez enviado el formulario en el fichero "register.php" como indica la "action" del "form". La validación debemos hacerla de la siguiente forma:


<?php
@session_start();
$captcha=$_POST["captcha"];

if ($_SESSION['tmptxt']!= $captcha) {
echo "Captcha Correcto";
}
else{echo "Captcha Incorrecto";}

?>

Como vemos $_SESSION['tmptxt'] contiene los caracteres correctos del captcha y los compara con el texto introducido en el formulario y en función de si es correcto o no muestra dos mensajes diferentes.

A partir de aquí cada uno lo usareis a vuestro antojo pero eso si, podreis implementar un captcha seguro y completo, pudiendo recargarlo dinámicamente en caso de que no se distingan las letras.

COMENTARIOS

26-07-2011 23:30:54
El function lo puedes meter donde tu quieras. Lo normal es hacer un archivo funciones.js y hay metes el function.Por último para utilizar la función en tu formulario como en el ejemplo debes incluir el fichero funciones.js con <script type="text/javascript" src="funciones.js"></script>. Otra opción que tienes es meter directamente la función en el archivo HTML que tengas metiendo la funcion entre las etiquetas <script></script>.Lo puedes poner en el <head> de la pagina mismamente siempre entre las etiquetas correspondientes <script>. Si tienes alguna duda más no dudes en preguntarme.
26-07-2011 20:24:12
oye compañero son nuevo en esto donde agrego el fuction

DEJA TU COMENTARIO