Foros del Web » Programando para Internet » PHP »

Seguridad en Libro de Visitas

Estas en el tema de Seguridad en Libro de Visitas en el foro de PHP en Foros del Web. Estimados: Tengo un especie de libro de visitas programado por mi mismo (no soy ningun experto) y que esta ubicado en www.todoalbo.cl/2007/index.php?sec=elmuro . Resulta que ...
  #1 (permalink)  
Antiguo 28/08/2007, 08:40
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Seguridad en Libro de Visitas

Estimados:

Tengo un especie de libro de visitas programado por mi mismo (no soy ningun experto) y que esta ubicado en www.todoalbo.cl/2007/index.php?sec=elmuro. Resulta que de un tiempo hasta ahora me han llenado de "Spam" que por lo que me han explicado se hace no ingresando al sitio, sino que enviando los datos desde otra parte. Existe algun modo de seguridad para eso? Y lo otro, como creo una session o una cookie para que no se pueda postiar dos veces seguidas en menos de 1 minuto por ejemplo?. No me encuentro en mi PC asi que no tengo el Codigo. Apenas llegue a mi casa posteo el codigo por si alguien puede ayudar.
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #2 (permalink)  
Antiguo 28/08/2007, 08:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Seguridad en Libro de Visitas

Para evitar el SPAM se recomienda agregar una clave que se conoce como prueba CAPTCHA, asi evitas que pongan comentarios en tu libro de visitas via un bot.

Para hacer una cookie solo es cuestion de que la agregues con set_cookie.

Saludos.
  #3 (permalink)  
Antiguo 28/08/2007, 09:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

GatorV, Que es eso de CAPTCHA?

Aqui les dejo el codigo completo del archivo por si me pueden ayudar, jeje:

Código PHP:
<table width="684" border="0" align="right" cellpadding="0" cellspacing="0" class="mrg-uno-arriba">
  <tr>
    <td width="688" valign="top"><div align="right">
      <p><img src="images/titulos/interactua_elmuro.jpg" width="684" height="60"></p>
      <table width="684" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td class="mrg-dos-right">
            <p><font face="Geneva, Arial, Helvetica, sans-serif" size="1">Conectado desde <font color="#999999"><?php echo $REMOTE_ADDR;  ?></font></font><br>
             <font color="#000000" face="Geneva, Arial, Helvetica, sans-serif" size="1">
              <?php 
$hoy
=strftime("%A %d de %B de %Y, %H:%M"); 
$hoy=str_replace("Monday","Lunes",$hoy); 
$hoy=str_replace("Tuesday","Martes",$hoy); 
$hoy=str_replace("Wednesday","Miercoles",$hoy); 
$hoy=str_replace("Thursday","Jueves",$hoy); 
$hoy=str_replace("Friday","Viernes",$hoy); 
$hoy=str_replace("Saturday","Sabado",$hoy); 
$hoy=str_replace("Sunday","Domingo",$hoy); 
$hoy=str_replace("January","Enero",$hoy); 
$hoy=str_replace("February","Febrero",$hoy); 
$hoy=str_replace("March","Marzo",$hoy); 
$hoy=str_replace("April","Abril",$hoy); 
$hoy=str_replace("May","Mayo",$hoy); 
$hoy=str_replace("June","Junio",$hoy); 
$hoy=str_replace("July","Julio",$hoy); 
$hoy=str_replace("August","Agosto",$hoy); 
$hoy=str_replace("September","Septiembre",$hoy); 
$hoy=str_replace("October","Octubre",$hoy); 
$hoy=str_replace("November","Noviembre",$hoy); 
$hoy=str_replace("December","Diciembre",$hoy);
echo 
$hoy
include(
"conexion.php"); 
        
?> horas.
        </font></p>
          <?
          
if ($enviar == "si")
          {
$asunto=$_POST["asunto"];
$comprobar_asunto=substr($asunto,0,5);
if (empty(
$mensaje) or empty($nombre) or $comprobar_asunto == "<META")
{
echo 
'<p align="center"><font face="Geneva, Arial, Helvetica, sans-serif" size="3" color="red"><b>EXISTE UN ERROR EN EL MENSAJE. POR FAVOR REVISALO.</b></font></p>';
}
          else
{
          require(
"conexion.php");
mysql_db_query("$db","insert into elmuro (nombre,email,fecha,ip,mensaje,asunto) values ('$nombre','$email','$fecha','$ip','$mensaje','$asunto')");
                    echo 
'<p align="center"><font face="Geneva, Arial, Helvetica, sans-serif" size="3"><b>Tu Mensaje fue insertado correctamente</b></font></p>';
$resultx=mysql_db_query("$db","select * from elmuro ORDER BY id ASC");
//Mostramos los registros
while ($row=mysql_fetch_array($resultx))
{
$idz ''.$row["id"].'';
}
mysql_free_result($resultx)
;
/* recipientes */
$para  "[email protected]";

/* mensaje */
$asuntop 'Muro Todoalbo.cl - '.$asunto.'';
$mensajep '
<html>
<head>
 <title>Muro Todoalbo.cl</title>
</head>
<body>
<strong>Nombre:</strong> '
.$nombre.'<br>
<strong>E-Mail:</strong> '
.$email.'<br>
<strong>Fecha:</strong> '
.$fecha.'<br>
<strong>Asunto:</strong> '
.$asunto.'<br>
<br>
<strong>Mensaje:</strong> '
.$mensaje.'<br>
<br>
<em>Ip: '
.$ip.'</em><br><br>
<a href="http://www.todoalbo.cl/set/borrar.php?id='
.$idz.'" target="_blank">Borrar Mensaje</a>
</body>
</html>
'
;

/* Para enviar correo HTML, puede definir la cabecera Content-type. */
$cabeceras  "MIME-Version: 1.0\r\n";
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* cabeceras adicionales */
$cabeceras .= "From: ".$nombre." <".$email.">\r\n";

/* y ahora, enviarlo */
mail($para$asuntop$mensajep$cabeceras);
          }
          }
          
?><div align="center"><table height="60" border="0" cellspacing="0" bgcolor="#E1E1E1" class="borde-negro">
  <tr>
    <td><? 
    $cuantos
="4";
$as_categ_id="1285";
$buscar="colo colo";
$pais="MLC";
    include(
"mercadosocios/horizontal.php"); ?></td>
  </tr>
</table></div>
          <p align="center"><font face="Geneva, Arial, Helvetica, sans-serif" size="3"><b>- <a href="#escribir">Escribir Mensaje</a>&nbsp;<font color="#000000">-<br>
          </font>- <a href="javascript: window.location.reload()">Recargar</a> -&nbsp;</b></font></p>
          <?php 
include("conexion.php");
$con mysql_connect("$host","$user","$pass") or die (mysql_error());
mysql_select_db("$db",$con) or die (mysql_error());
$_pagi_sql "SELECT * FROM elmuro ORDER BY id DESC";
$_pagi_cuantos 10;
$_pagi_nav_num_enlaces 15;
include(
"paginator.php");
while(
$row mysql_fetch_array($_pagi_result))
{
?>
          <table width=480 height="0" border=0 align=center cellpadding=6 cellspacing=6 bgcolor=#CCCCCC>
          <tr>
            <td width="546" height="107" align=left bgcolor="#666666">
<font face="Geneva, Arial, Helvetica, sans-serif" size="2" color="#FFFFFF"><b>Nombre:&nbsp;</b> <? echo $row["nombre"];?><br>
<b>E-Mail: </b><? echo $row["email"];?><br>
<b>Asunto: </b><? echo $row["asunto"];?><br>
<b>Fecha:</b> <? echo $row["fecha"];?>
<br><br>
<b>Mensaje:</b><br>
<? echo nl2br($row["mensaje"]);?>
<br>
<font size="1"><b>Ip: </b><? echo $row["ip"];?></font></font></td>
          </tr>
        </table><br><?
        
}?>
<table width=480 height="18" border=0 align="center" cellpadding=0 cellspacing=0 bordercolor="#000000" bgcolor="#FFFFFF">
            <tr>
              <td width="667" height="1" align=center bordercolor="#FF0000" bgcolor="#CCCCCC"><font face="Geneva, Arial, Helvetica, sans-serif" size="2"><? echo $_pagi_navegacion;?></font></td>
            </tr>
          </table><br>
            
            <table border=1 width=480 cellspacing=1 cellpadding=0 bgcolor=#FFFFFF align="center" bordercolor="#000000">
              <tr>
                <td align=left bgcolor=#999999 bordercolor="#FFFFFF" ><div align="center"><font face="Geneva, Arial, Helvetica, sans-serif"><b> <font size="2" color="#000000"><a name="escribir" id="escribir">::: A&ntilde;adir mensaje :::</a></font></b> </font></div></td>
              </tr>
              <tr>
                <td align=center height=5 bordercolor="#FFFFFF"><form method="post" action="?sec=elmuro&enviar=si">
                    <input name="fecha" type="hidden" value="<?php
//setlocale(LC_TIME,"spanish"); 
$hoy=strftime("%A %d de %B de %Y"); 
$hoy=str_replace("Monday","Lunes",$hoy); 
$hoy=str_replace("Tuesday","Martes",$hoy); 
$hoy=str_replace("Wednesday","Miercoles",$hoy); 
$hoy=str_replace("Thursday","Jueves",$hoy); 
$hoy=str_replace("Friday","Viernes",$hoy); 
$hoy=str_replace("Saturday","Sabado",$hoy); 
$hoy=str_replace("Sunday","Domingo",$hoy); 
$hoy=str_replace("January","Enero",$hoy); 
$hoy=str_replace("February","Febrero",$hoy); 
$hoy=str_replace("March","Marzo",$hoy); 
$hoy=str_replace("April","Abril",$hoy); 
$hoy=str_replace("May","Mayo",$hoy); 
$hoy=str_replace("June","Junio",$hoy); 
$hoy=str_replace("July","Julio",$hoy); 
$hoy=str_replace("August","Agosto",$hoy); 
$hoy=str_replace("September","Septiembre",$hoy); 
$hoy=str_replace("October","Octubre",$hoy); 
$hoy=str_replace("November","Noviembre",$hoy); 
$hoy=str_replace("December","Diciembre",$hoy);
echo 
$hoy
/*6015 6560*/
      
?>">
                    <input name="ip" type="hidden" value="<?php
echo $REMOTE_ADDR;
      
?>">
                    <font face="Geneva, Arial, Helvetica, sans-serif"> </font>
                    <table border=0 cellspacing=5 height="75">
                      <tr>
                        <td width="200" height="25"  align=right><font face="Geneva, Arial, Helvetica, sans-serif"><b><font size=2>Nombre:</font></b></font></td>
                        <td width="324" height="25" bgcolor="#FFFFFF"><font face="Geneva, Arial, Helvetica, sans-serif">
                          <input type=text name="nombre" size="40"  maxlength="40" class="form-fondo">
                        </font></td>
                      </tr>
                      <tr>
                        <td width="200" height="1"  align=right><font face="Geneva, Arial, Helvetica, sans-serif"><b><font size=2>E-Mail:</font></b></font></td>
                        <td width="324" height="1" bgcolor="#FFFFFF"><font face="Geneva, Arial, Helvetica, sans-serif">
                          <input type=text name="email" size="40"  class="form-fondo">
                        </font></td>
                      </tr>
                      <tr>
                        <td width="200" height="1"  align=right><font face="Geneva, Arial, Helvetica, sans-serif"><b><font size="2">Asunto:</font></b></font></td>
                        <td width="324" height="1" valign="middle" bgcolor="#FFFFFF"><font face="Geneva, Arial, Helvetica, sans-serif">
                          <input name="asunto" type=text id="asunto" size="40" class="form-fondo">
                        </font></td>
                      </tr>
                    </table>
                  <font face="Geneva, Arial, Helvetica, sans-serif" size="2">
                    <b>Mensaje</b><br></font>
                    <textarea name="mensaje" wrap="virtual" cols="40"  rows="5" class="form-fondo"></textarea>
                    <br>
                    <br>
                    <br>
                    <input name="submit" type="submit" value="     A&ntilde;adir     " class="form-fondo">
                      &nbsp;&nbsp;&nbsp;&nbsp;
                      <input name="reset" type="reset" value="     Borrar     " class="form-fondo">
                    </font>
                </form></td>
              </tr>
            </table></td>
          </tr>
      </table>
      </div></td>
  </tr>
</table>
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #4 (permalink)  
Antiguo 28/08/2007, 10:05
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 1 mes
Puntos: 2
Re: Seguridad en Libro de Visitas

Mira Pedro, el sistema CAPTCHA consiste en crear un campo en tu formulario en el que el visitante tenga k escribir el texto k aparece en una imagen a su lado (normalmente el texto se distorsiona para k aun pudiendo entenderse por un humano, un posible robot listo no pueda pillarlo) Fijo k has visto este sistema en muxisimos sitios (al crear un correo, al registrarte en una pagina, al firmar en un libro de visitas como el tuyo...) Respecto a las cookies no soy ningun experto. Un saludo!
  #5 (permalink)  
Antiguo 28/08/2007, 10:16
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

La sesion la manejas con session_start() y la variable $_SESSION y las cookies con la funcion setcookie.

Igual con estas dos alternativas no evitas que posteen mas de 1 vez por minuto, si borras las cookies o cierran el navegador y vuelven al libro de visitas podran postear nuevamente.

Para algo asi yo usaria la base de datos.... si son usuarios registrados guardo la fecha-min-seg de su ultimo post, si no son usuarios logueados lo haria por IP aunque en este caso podrian cambiar de ip y postear 2 veces en un mnuto.

Saludos
Andres
  #6 (permalink)  
Antiguo 28/08/2007, 10:42
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Ya, lo de captcha lo encontre en google y si entiendo perfectamente lo que es. Lo voy a implementar y a ver como anda.
Lo del IP me parece interesante, de echo, mi base de datos guardo los IP's de los mensajes, as ique lo voy a hacer.
No existe otra forma de detener estos robots? que son realmente desagradables al momento de revisar el libro de visitas.

Alguien me pudiera decir ademas que es mas conveniente, la cookie o la session y como la implemento en el codigo que puse arriba??

Una vez mas gracias a la gente del foro de PHP, ya que tambien he preguntado cosas de Flash en el foro respectivo y nadie pesca o el que lo hace dice: "lee un tutorial", mientras que en PHP siempre la gente tiene la mejor disposcicion para ayudar. Felicitaciones
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #7 (permalink)  
Antiguo 28/08/2007, 12:17
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Nadie esta disponible para ayudarme? :(
jejejeje
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #8 (permalink)  
Antiguo 28/08/2007, 12:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Seguridad en Libro de Visitas

Con que necesitas ayuda? En si yo creo deberias de implementar CAPTCHA primeramente y posteriormente agregar el codigo de set_cookie para que solo te permita escribir 1 vez en cada X rango de tiempo.

Saludos.
  #9 (permalink)  
Antiguo 28/08/2007, 12:21
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

No te ayudamos nada?

Resumen:
- Lucha contra el spam --> captcha

- Control de haber posteado --> sesiones, cookies, bd + ip
Todas se puedes saltear facilmente para postear mas de una vez por minuto.

Esta en ti decidir que prefieres, evaluar, ver y segun tu caso decidir por alguna.

Saludos
Andres

pd: si pones otra pregunta con gusto contestare :)
  #10 (permalink)  
Antiguo 28/08/2007, 12:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Si me han ayudado y bastante, jejeje

Lo del captcha lo tengo listo. Pero lo de la cookie nunca lo he entendido. En que parte pongo Setcookie y como la compruebo y todo eso? (voy a probar con la cookie y si no resulta con eso, voy a restringir por bd). El codigo esta un poco mas arriba. Supongo que debe ir en la parte del insert a la bd pero no se como :(
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #11 (permalink)  
Antiguo 28/08/2007, 12:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Seguridad en Libro de Visitas

Asi pones una cookie:
Código PHP:
set_cookie"mycookie""elvalor" ); 
y para leerla:

Código PHP:
echo $_COOKIES['mycookie']; 
Saludos.
  #12 (permalink)  
Antiguo 28/08/2007, 13:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

y despues para comprobar si existe o no lo pongo dentro de un if() noma?
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #13 (permalink)  
Antiguo 28/08/2007, 13:12
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Hola, te dejo una solución que acabo de crear:

consta de tres archivos: formulario.php, texto_a_imagen.php y la_fuente.ttf.

formulario.php
Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['captcha']) || empty($_SESSION['captcha']))
{
    
// Si no hay código de seguridad...
    
$_SESSION['captcha'] = substr(md5(time().microtime()), 08); // Creo código de seguridad aleatorio
}

if (
$_POST['submit'])
{
    if (
$_POST['codigo_seguridad'] != $_SESSION['captcha'])
    {
        
// Posible BOT Spammer en nuestro sistema
        
unset($_SESSION['captcha']); // Borro la clave captcha para que al recargar la página se crée una nueva
        
$_SESSION['mensaje_error'] = 'No has escrito bien el código de seguridad'// Asigno un mensajito
        
header('Location: '.$_SERVER['PHP_SELF']); // Redirecciono a la misma página
        
exit(); // Nos asegurames que el script termine acá
    
}

    
// Ponemos el código de nuestro interés.
    
echo '<p>No eres un bot, o al menos eso nos hiciste creer :P</p>';
}

// -- Fin del sistema anti-bot

if ($_SESSION['mensaje_error'])
{
    echo 
'<p>'.$_SESSION['mensaje_error'].'</p>';
    unset(
$_SESSION['mensaje_error']);
}
?>

<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">
    <fieldset>
        <legend>Formulario</legend>
        <label for="email">E-mail:</label>
        <input type="text" name="email" id="email" />

        <label for="clave">Clave:</label>
        <input type="password" name="clave" id="clave" />

        <label for="captcha">C&oacute;digo de seguridad:</label>
        <img src="texto_a_imagen.php" id="captcha" />

        <label for="codigo_seguridad">Repetir c&oacute;digo de seguridad:</label>
        <input type="text" name="codigo_seguridad" id="codigo_seguridad" />
    </fieldset>
    <input type="submit" name="submit" value="Continuar" />
</form>
texto_a_imagen.php
Código PHP:
<?php
session_start
();

$texto $_SESSION['captcha']; // Tomo el código de seguridad creado en formulario.php
$fuente 'amaze.ttf';
$fuente_tamano 21;

$ancho 110;
$alto 35;

$img imagecreate($ancho$alto);
imagecolorallocate($img255255255); // Color del fondo

$color_texto imagecolorallocate($img13819077); // Color del texto
imagettftext($img$fuente_tamano0526$color_texto$fuente$texto);

header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
Espero te sea útil ;)

Les dejo el link comprimido de los 3 archivos por si a alguien le interesa ;)
php_captcha.7z (37 KB)
php_captcha.zip (43 KB)
  #14 (permalink)  
Antiguo 28/08/2007, 13:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Gracias, lo voy a probar de igual manera.
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #15 (permalink)  
Antiguo 29/08/2007, 10:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Problema codigo CAPTCHA!!

Ayer aqui mismo muchos usuarios me dijeron que usara Captcha para la seguridad en un libro de visitas. Saque un codigo buscado por google y en mi localhost de prueba funcionaba perfecto. El problema fue al subirlo al servidor, que me arrojo el siguiente error:

Fatal error: Call to undefined function: imagettfbbox() in /home/todoalbo/public_html/2007/php/captcha.php on line 60


El codigo completo es el siguiente, por si alguien sabe que esta pasando.

Código PHP:
<?php
session_start
();
 
/*
* File: CaptchaSecurityImages.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 03/08/06
* Updated: 07/02/07
* Requirements: PHP 4/5 with GD and FreeType libraries
* Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php

* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License 
* as published by the Free Software Foundation; either version 2 
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details: 
* http://www.gnu.org/licenses/gpl.html
*
*/
 
class CaptchaSecurityImages {
 
   var 
$font 'Arial.ttf';
 
   function 
generateCode($characters) {
      
/* list all possible characters, similar looking characters and vowels have been removed */
      
$possible 'bcdfghjkmnpqrstvwxyz';
      
$code '';
      
$i 0;
      while (
$i $characters) { 
         
$code .= substr($possiblemt_rand(0strlen($possible)-1), 1);
         
$i++;
      }
      return 
$code;
   }
 
   function 
CaptchaSecurityImages($width='120',$height='40',$characters='6') {
      
$code $this->generateCode($characters);
      
/* font size will be 75% of the image height */
      
$font_size $height 0.65;
      
$image imagecreate($width$height) or die('Cannot initialize new GD image stream');
      
/* set the colours */
      
$background_color imagecolorallocate($image255255255);
      
$text_color imagecolorallocate($image2040100);
      
$noise_color imagecolorallocate($image100120180);
      
/* generate random dots in background */
      
for( $i=0$i<($width*$height)/3$i++ ) {
         
imagefilledellipse($imagemt_rand(0,$width), mt_rand(0,$height), 11$noise_color);
      }
      
/* generate random lines in background */
      
for( $i=0$i<($width*$height)/150$i++ ) {
         
imageline($imagemt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
      }
      
/* create textbox and add text */
      
$textbox imagettfbbox($font_size0$this->font$code) or die('Error in imagettfbbox function');
      
$x = ($width $textbox[4])/2;
      
$y = ($height $textbox[5])/2;
      
imagettftext($image$font_size0$x$y$text_color$this->font $code) or die('Error in imagettftext function');
      
/* output captcha image to browser */
      
header('Content-Type: image/jpeg');
      
imagejpeg($image);
      
imagedestroy($image);
      
$_SESSION['security_code'] = $code;
   }
 
}
 
$width = isset($_GET['width']) && $_GET['height'] < 600 $_GET['width'] : '120';
$height = isset($_GET['height']) && $_GET['height'] < 200 $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > $_GET['characters'] : '6';
 
$captcha = new CaptchaSecurityImages($width,$height,$characters);
 
?>
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #16 (permalink)  
Antiguo 29/08/2007, 11:40
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Problema codigo CAPTCHA!!

Para usar esa funcion se requiere tanto de la biblioteca GD como de la biblioteca FreeType.
Seguro estan instaladas ?

Saludos
Andres
  #17 (permalink)  
Antiguo 29/08/2007, 12:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Seguridad en Libro de Visitas

Temas unidos porfavor no dupliques temas.
  #18 (permalink)  
Antiguo 29/08/2007, 14:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Seguridad en Libro de Visitas

Las bibliotecas GD y FreeType las puedo encontrar via phpinfo(); ??? La GD estoy casi seguro que la tengo, la otra tengo mis dudas.
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:34.