Compartiendo el conocimiento
RSS icon Email icon Bullet (black)
  • Preguntas de Seguridad, Códigos Captcha y Anti-Spam (Artículo 2 de 2)

    Posted on febrero 18th, 2009 admin 4 comments

    En esta segunda parte del artículo aprenderemos a mostrar un código Captcha visualizando una serie de caracteres sin sentido sobre una imagen.

    Este ejemplo nos servirá como aprendizaje de la técnica a utilizar, ya que si se quisiera que fuese más fuerte de romper por un Robot, sería aconsejable utilizar distintos tipos de letras, tamaños e inclinaciones de las mismas, aunque todo esto unido, hace al final que la introducción de estos carácteres sea todo un reto.

    Vereis también, que el ejemplo siguiente, no difiere mucho del ejemplo de la primera entrega. Basicamente, realizar un único tipo de pregunta aritmética es mucho más facil de encontrar la respuesta correcta por un Robot, por ejemplo intentando siempre poner la misma cifra (y tendrá un alto porcentaje de acierto), que en este caso, preguntar por una serie de caracteres totalmente aleatorios.

    Veamos el ejemplo de Captcha

    Código fuente de la clase que genera el string aleatorio en una imagen

    <?php
    session_start();

    // Función que devuelve una cadena de caracteres aleatoriamente.
    // Podeis mezclar minusculas y mayusculas
    function randomText($length) {
        $key="";
        $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
        for($i=0;$i<$length;$i++) {
          $key .= $pattern{rand(0,35)};
        }
        return $key;
    }

    // Guardamos en la variable de sesion la clave para poderla comparar
    $_SESSION['clave'] = randomText(8);

    // Utilizamos una imagen de fondo   
    $captcha = imagecreatefromgif("bgcaptcha.gif");

    // Color Negro para el texto que irá encima de la imagen
    $colText = imagecolorallocate($captcha, 0, 0, 0);

    // Convertimos el codigo captcha a una imagen para dificultar la lectura
    // Por parte de los Robots
    imagestring($captcha, 5, 16, 7, $_SESSION['clave'], $colText);

    // Escribimos la imagen
    imagegif($captcha);
    ?>

    Código fuente del formulario de ejemplo

    <? session_start(); ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Imagen Captcha</title>
    </head>
    <body>
    <?
        <!-- Si se ha enviado el formulario -->

        if ($_POST){
            <!-- Si la clave es correcta -->
            if ($_POST['cCaptcha']==$_SESSION['clave']){
                echo "Clave correcta";
            }else{
                echo "Clave incorrecta";
            }
            echo "<br><a href='".$_SERVER['PHP_SELF']."'>Volver</a>";
        }else{     
    ?>
    <form action="<? echo  $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="frmCaptcha">
        <!-- Imagen Captcha -->
        <img src="cCaptcha.php" alt="Captcha" id="imgCaptcha2" /><br />
        <input name="cCaptcha" type="text" size="13" maxlength="8" />
        <input type="submit" name="cmdEnviar" value="Enviar" />
    </form>
    <? } ?>
    </body>
    </html>

    Decargar ficheros

 

4 Respuestas to “Preguntas de Seguridad, Códigos Captcha y Anti-Spam (Artículo 2 de 2)”

  1. 4ffnDB Excellent article, I will take note. Many thanks for the story!

  2. Buena nota

  3. Thanks for the isnhigt. It brings light into the dark!

  4. Hello! eeaecdc interesting eeaecdc site! I’m really like it! Very, very eeaecdc good!