Foros del Web » Programando para Internet » PHP »

Sistema de seguridad mediante imagenes aleatorias con letras

Estas en el tema de Sistema de seguridad mediante imagenes aleatorias con letras en el foro de PHP en Foros del Web. Hola a todos, me gustaria implimentar un sistema de seguridad de estos, en los que aparezen varias imagenes de la A a la Z y ...
  #1 (permalink)  
Antiguo 23/12/2003, 05:35
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Sistema de seguridad mediante imagenes aleatorias con letras

Hola a todos, me gustaria implimentar un sistema de seguridad de estos, en los que aparezen varias imagenes de la A a la Z y que conforme le das a actualizar la pagina se alternan de forma que nunca sabes que conbinacion van ha hacer. A mi me gustaria hacer algo parecido por ejemplo:

una web en php con un formulario que dice "introducta el codigo que visualiza en la parte superior de este cuadro" introduce las letras en el cuadro le da a continuar y el url cambia de esta forma index.php?code=dksyf y si es correcto en index.php?code=dksyf estaria la informacion al que usuario quiere acceder.

Gracias a ver si me podeis ayudar a desarroyar este codigo.

Un Saludo. espero sus respuestas.
  #2 (permalink)  
Antiguo 23/12/2003, 11:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Pues yo hice esto (lo puse en un mensaje no hace mucho .. pero ahora no recuerdo donde está) .. espero que te sirva:

Código PHP:
<?php
/*
Función: Genera passwords aleatorios (numéricos o alfanuméricos).
Entrada: Logintud: (digitos/caracteres a generar), tipo: [numerio|alfanumerico]
Salida: Devuelve string.
*/

function genera_password($longitud,$tipo="alfanumerico"){

    if (
$tipo=="alfanumerico"){
        
$exp_reg="[^A-Z0-9]";
    } elseif (
$tipo=="numerico"){
        
$exp_reg="[^0-9]";
    }

    return 
substr(eregi_replace($exp_reg""md5(time())) .
       
eregi_replace($exp_reg""md5(time())) .
       
eregi_replace($exp_reg""md5(time())),
       
0$longitud);
}


// Configuración.

// Nombres tipografías a usar (sin extensión .ttf)
$tipografias = array("arial","comic","times");

// Directorio donde estén las fuentes .. (ruta absoluta)
// (importante el último /o \ según corresponda.
// (Las fuentes son True Type (.ttf)
$tipografias_ruta "C:\WINDOWS\FONTS\\"// Windows.
// $tipografias_ruta="/home/sito/public_html/fonts/"; // Linux (*NIX)

// Inicializa eje X desde donde se empezará a
// "dibujar" el código. (referente al tamaño de la "caja")
$espacio 0;

// Tamaño fuente.
$tamano_fuente 15;

// Profundidad caracteres/digitos del código a generar (password).
$profundidad_codigo 8// (alfanuméricos)


// Rutina ...

    // Generamos un código (password) aleatorio.
    
$codigo=genera_password($profundidad_codigo);

    
// Cálculo Ancho automático de la "caja"
    
    
$x=$profundidad_codigo*$tamano_fuente;
    
$y=$tamano_fuente;

    
// Iniciar la generación de la imagen. Se define una "caja" de $x por $y pixels.
    
$im imagecreate ($x$y);
    
    
// Definición Colores. Expresados en valores R G B (respectivamente).
    
$color_fondo imagecolorallocate ($im255255255); // Blanco
    
$color_texto imagecolorallocate ($im000); // Negro

    
for ($caracter=0$caracter<=$profundidad_codigo$caracter++){

        
// Seleccion de una tipografía aleatoria.
        
$indice_aleatorio=array_rand($tipografias);
        
$tipografia=$tipografias_ruta.$tipografias[$indice_aleatorio].".ttf";
    
        
// Generar el caracter gráfico.
        
ImageTTFText ($im$tamano_fuente0$espacio$tamano_fuente$color_texto$tipografia $codigo{$caracter});

        
// Separación entre caracteres
        
$espacio +=$tamano_fuente;
    }

    
// Cabecera HTTP. Indica al navegador que la imagen que estamos generando es .PNG
    
header("Content-type: image/png");
    
    
// Generar Imagen (un .png Dinámico.)
    
imagepng ($im);
    
// Destruir imagen (de memoria .. va a ser enviada directamente al navegador).
    
imagedestroy ($im);
?>
Usa las extensiones GD para geneara las letras según tipografía (aleatoria para cada letra) y una función más para generar códigos (numéricos y/o alfanuméricos).

Si el código/password a generar .. se lo vas a generar tu .. no uses la función genera_password() .. ahí verás tu ..

En principio el código se usa bajo una llamada de un tag de imagen en HTML:

<img scr="genera_password.php">


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 23/12/2003, 13:03
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
No entiendo bien tendria que hacer un php llamado genera_password.php y otro llamado hola.php (por ejemplo) con <img scr="genera_password.php"> eso es lo que acabo de hacer y nada no me visualiza ninguna imagen, tengo algunas dudas:

$tipografias_ruta = "C:\WINDOWS\FONTS\ el tipo de letra que lo coje del pc del usuario o es la ruta donde se encuentra los tipos de letra del servidor?

y no se como se utilizan las extensiones GD

gracias por el codigo, a ver si me puedes ayudar

un saludo
  #4 (permalink)  
Antiguo 23/12/2003, 13:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno, primeramente asegurate que tu servidor soporta las extensiones GD en PHP. Lo puedes ver haciendo:

Código PHP:
<?
phpinfo
();
?>
Ahí verás si tienes soporte GD en tu servidor un bloque de información referente a GD (con la versión que usas y otros detalles).

Las fuentes que use el script no se obtienen del cliente (PC usuario) sino del servidor. En la mini-documentación que incluyo indico que esa es la ruta hacia el directorio donde tengas tus fuentes en tu servidor. Create un directorio en tu servidor y sube a el algunas fuentes TTF (de windows) para probarlo. La ruta ha de se -Absoluta- como el ejemplo que puse para "linux".

El uso del script es como mencionas. Un script de nombre cualquiera con ese código completo y la llamada vía el tag de HTML de imagen en la página/script que lo quieras usar. Eso sería en principio para probarlo. Luego si quieres, puedes sacar fuera de ese script la función que genera el password para llamarlo desde otro script y hacer las comparaciones de seguridad que requieras de ese dato con el que intruduzcan en un campo input de un formulario tus usuarios.

Lo importante es que la parte del código que genera la imagen (todo menos la función genera_password() ..) esté en un script independiente ya que envia cabeceras HTTP al navegador para indicarle que lo que ha generado es un gràfico (por eso hay que llamarlo con un tag de HTML de imagen .. para que sea interpretado en tu pagína con el resto de HTML correctamente).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 23/12/2003, 13:41
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Si mi servidor linux soporta GD, en una carpeta llamada letras he volcado arial.ttf comic.ttf y times.ttf

quedando asi aleatorio.php

<?php
/*
Función: Genera passwords aleatorios (numéricos o alfanuméricos).
Entrada: Logintud: (digitos/caracteres a generar), tipo: [numerio|alfanumerico]
Salida: Devuelve string.
*/

function genera_password($longitud,$tipo="alfanumerico"){

if ($tipo=="alfanumerico"){
$exp_reg="[^A-Z0-9]";
} elseif ($tipo=="numerico"){
$exp_reg="[^0-9]";
}

return substr(eregi_replace($exp_reg, "", md5(time())) .
eregi_replace($exp_reg, "", md5(time())) .
eregi_replace($exp_reg, "", md5(time())),
0, $longitud);
}


// Configuración.

// Nombres tipografías a usar (sin extensión .ttf)
$tipografias = array("arial","comic","times");

// Directorio donde estén las fuentes .. (ruta absoluta)
// (importante el último /o según corresponda.
// (Las fuentes son True Type (.ttf)
// $tipografias_ruta = "C:\WINDOWS\FONTS\"; // Windows.
$tipografias_ruta="/www/paginafacil/blue/letras/"; // Linux (*NIX)

// Inicializa eje X desde donde se empezará a
// "dibujar" el código. (referente al tamaño de la "caja")
$espacio = 0;

// Tamaño fuente.
$tamano_fuente = 15;

// Profundidad caracteres/digitos del código a generar (password).
$profundidad_codigo = 8; // (alfanuméricos)


// Rutina ...

// Generamos un código (password) aleatorio.
$codigo=genera_password($profundidad_codigo);

// Cálculo Ancho automático de la "caja"

$x=$profundidad_codigo*$tamano_fuente;
$y=$tamano_fuente;

// Iniciar la generación de la imagen. Se define una "caja" de $x por $y pixels.
$im = imagecreate ($x, $y);

// Definición Colores. Expresados en valores R G B (respectivamente).
$color_fondo = imagecolorallocate ($im, 255, 255, 255); // Blanco
$color_texto = imagecolorallocate ($im, 0, 0, 0); // Negro

for ($caracter=0; $caracter<=$profundidad_codigo; $caracter++){

// Seleccion de una tipografía aleatoria.
$indice_aleatorio=array_rand($tipografias);
$tipografia=$tipografias_ruta.$tipografias[$indice_aleatorio].".ttf";

// Generar el caracter gráfico.
ImageTTFText ($im, $tamano_fuente, 0, $espacio, $tamano_fuente, $color_texto, $tipografia , $codigo{$caracter});

// Separación entre caracteres
$espacio +=$tamano_fuente;
}

// Cabecera HTTP. Indica al navegador que la imagen que estamos generando es .PNG
header("Content-type: image/png");

// Generar Imagen (un .png Dinámico.)
imagepng ($im);
// Destruir imagen (de memoria .. va a ser enviada directamente al navegador).
imagedestroy ($im);
?>



Depues otro php llamado pass.php he puesto:

<img scr="aleatorio.php">

Y al escribir en el explorador el url sale esto:

http://blue.paginafacil.com/pass.php

No entiendo donde puede estar el fallo
  #6 (permalink)  
Antiguo 23/12/2003, 15:13
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

La explicacion es esta: http://blue.paginafacil.com/aleatorio.php

Si te fijas, ese hosting mete la publicidad con un frame que crea mediante javascript. Y parece que añade ese javascript aunque estes generando una imagen, con lo cual se corrompe la imagen y muestra "imagen rota".

Pregunta en los foros del hosting, he visto que lo usan en el nuke y lo tienen funcionando.

Por supuesto, asegurate de no estar generando salida antes del header(). Prueba a poner un error_reporting(E_ALL); al comienzo del script.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 24/12/2003, 06:14
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
lo probe en otro hosting y hacia lo mismo, no lo entiendo
  #8 (permalink)  
Antiguo 24/12/2003, 06:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. donde lo has probado? .. en otro servicio de hosting gratuito que meten publicidad (banner al principio o similar)?

No puedes probarlo en tu PC como servidor? (con PHP "limpio")?. Salvo error u omisión, el código que puse funciona correctamente.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 24/12/2003, 06:59
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
¿Has probado a poner el error_reporting(E_ALL); al comienzo? Lo digo porque en pagina facil he mirado las cabeceras y en content-type viene text/html. Quizas este produciendose un error que impida enviar tu header(), como por ejemplo que envies algun caracter en blanco antes. Comprueba que tu primer caracter del fichero PHP sea <?php y que no saques ningun caracter de salida. Con el error_reporting() puede que te muestre el tipico error headers can't be sent...

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 24/12/2003, 07:52
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Si que tengo un linux con apache, php y mysql el problema es que mire con phpinfo y al parecer no soporta GD, si los demas hosing que lo he probado tambien tiene publicidad, miarroba, iefactory...

A ver si me funcionan tus consejos, pero como se tan poco no sabre colocarlos.

saludos

Última edición por escan_0; 24/12/2003 a las 07:54
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 18:53.