| |||
Como hacer un codigo visual de seguridad Hola buenas una vez mas pido de vuestra ayuda para poder añadir una mejora a mi portal. Se trata de hacer que en el registro de los usuarios, estos tengan que introducir un codigo que se muestre através de una imagen aleatoria. Gracias por todo y espero vuestra respuesta. |
| |||
Tienes un ejemplo en este mensaje: http://www.forosdelweb.com/showthrea...hreadid=159645 Usa las librerias/extensiones GD para generar dinámicamente el gráfico de la contraseña generada. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Vale cluster pero me falta una cosa, como compara el codigo generado con el que ha introducido el usuario?¿
__________________ Deja el mundo mejor que como lo encontraste... By B.P. |
| |||
La rutina sólo genera el código y el ejemplo incluye la función que genera el código y la parte de la lógica que lo transforma en gráfico.. Tendrias que separarlo en dos archivos diferentes (sobre todo por la parte del que genera el gráfico) para generar ese texto aleatorio (contraseña?) y pasarselo como parámetro al script que tenga el código que genera el gráfico para que lo genere y lo muestre .. Ese dato generado (la contraseña desde la función que lo crea) es que debes comparar con el que tu usuario introduzca en tu formulario.. Para este "traspaso" de variables (esa generada) sería altamente recomendable (por seguridad) que la propagues en una variable de sesión .. si lo haces por el URL o campos hidden de tus formularios sería fácilmente alterable y usada por esos "robot's" que buscan ese dato en tu página para usarlo en tus scripts de proceso que crean esa cuenta o lo que haga tras validar eso datos .. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
He podido entender el funcionamiento, pero mis conocimientos no dan para llevarlo a la practica. Podrias darme un ejemplo, usando el codigo que tu ya mostraste en ese mensaje. Codigo: mm bueno .. no he visto tu problema concreto ahora mismo, pero .. jeje hice una funcioncita igual para el mismo cometído: genera_password.php 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:WINDOWSFONTS\"; // 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 ($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); ?> -------------------------------------------------------------------------------- Y su forma de uso .. ejemplo: demo.html code:--------------------------------------------------------------------------------<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title>Title here!</title> </head> <body> El password: <img src="genera_password.php"> </body> </html> Gracias por todo Cluster.
__________________ Deja el mundo mejor que como lo encontraste... By B.P. Última edición por Section1; 20/02/2004 a las 10:25 |
| |||
(usa el botón PHP para poner código saldrá coloreado .. de todas formas el link del mensaje original con el código ya estaba ..) Básicamente .. como ya te dije . .debes en principio separar ambas funciones .. la que genera el código y la que hace la rutina para generar el grafico a partir de esa cadena .. Sería algo tipo: funciones.php Código PHP: <? // inicio uso sesiones. session_start(); // aquí metes tu función genera_password include ("funciones.php"); // llamas a la función para generar un password. $pass=genera_password(10); // lo dejamos en una variable de sesión para poderlo leer de forma segura en otro proceso.php ... $_SESSION['mipass']=$pass; ?> <html> </head> </head> <body> <!-- .. etc y tu formulario con --> <form action="procesa.php" method="POST"> <!-- la imagen generada con nuestro password ... --> <img src="genera_password.php?pass=<? echo $pass ?>"> <input type="text" name="pass"> etc... campos y botón enviar ... </form> </body> </html> genera_password.php Código PHP: Código PHP: Un saludo, PD: no lo he probado .. así que igual no funciona .. pero por ahí va la cosa.
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Hay el problema de que no se visualiza la imagen i en su lugar aparece la tipica cruz o aspa roja. Saludos, Section1
__________________ Deja el mundo mejor que como lo encontraste... By B.P. |
| |||
Y tienes soporte de las librerías GD en tu servidor? ... (intenta ver el código que genera en tu navegador -> ver código fuente .. ) También prueba a llamar directamente al generador del gráfico (del código en forma de gráfico) y observa si eso funciona. (en tu navegador ..) genera_password.php?pass=1234 Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Por mensaje privado me has comentado que el código en cuestión lo estás probando el Lycos (servicio gratuito de hosting) .. verifica primero si Lycos te dá soporte de las librerías GD (creo que no lo dá) .. Si puedes pasate un: Código PHP: ------------- Creo que ya ví el problema .. independiente de que tenga o no las librerías GD (extensiones) dicho servidor ... la publicidad que mete Lycos se hace -antes- de tus posibles envios de cabeceras HTTP como la que indica al navegador que el dato que se le va a enviar es un gráfico (en ese caso .PNG) .. así que por ahí también dará problemas .. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. Última edición por Cluster; 19/03/2004 a las 11:15 |
| |||
Hay akguna possibilidad de resolverlo porque hasta dentro de una temporada no voy ha adquirir un hosting de pago. Gracias Cluster. Saludos!
__________________ Deja el mundo mejor que como lo encontraste... By B.P. |
| ||||
oye que suerte la tuya cluster posteo codigo ;) voy a probarlo jejejje viniendo de cluster es magiaaaaa
__________________ Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil Hoteldipity Arte Caracol |
| |||
Si, Secion1 .. en lugar de generar los caracteres del código de forma totalmente dinámica con las librerias GD y todo el tema de cabeceras HTTP que se requieren .. podrías generar tus gráficos de letras (A-Z) y números (0-9) como gráficos independintes y llamarlos con un bucle que recorra cada caracter/numero de esa cadena (string) que contiene el password generado. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Hola, Si haces lo que comenta cluster en el ultimo mensaje (graficos independientes para cada caracter) no llames a los ficheros con un nombre descriptivo de lo que es. Porque si al fichero que es un uno lo llamas 1.jpg, ya no es una forma valida de hacer que solo los que lo vean puedan escribirlo (el objetivo de estos codigos). Cualquier script que sepa como llamas a cada fichero podria "teclear" el codigo automagicamente. Saludos. PD: ¿En lycos funciona Nuke? Porque creo que el Nuke usa eso del codigo visual. PD2: Podrias en lugar de generar la imagen con un PHP, generar el fichero PNG correspondiente y poner el src del img a ese PNG creado. En la sesion almacenarias el codigo. PD3: Cluster, si metes en la sesion el $pass, no lo pases como parametro GET. Ademas, si pasas el codigo como parametro al script, cualquier script podria "teclear" el codigo.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| |||
Cita: Ok, .. tienes razón. Se me pasó el "detallazo".PD3: Cluster, si metes en la sesion el $pass, no lo pases como parametro GET. Ademas, si pasas el codigo como parametro al script, cualquier script podria "teclear" el codigo. Entonces sería: genera_password.php en lugar de: $codigo=$_GET['pass']; será: Código PHP: en lugar de: <!-- la imagen generada con nuestro password ... --> <img src="genera_password.php?pass=<? echo $pass ?>"> usar: Código PHP:
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Ahora que lo pienso .. El sistema de usar imagenes de forma independiente (como gráficos) .. no sería tampoco seguro .. aunque se pongan nombres de imagenes tipo 347923kjkas9.gif .. al final con un poco de paciencia obtendrían la secuencia. Para complicarlo "algo" más tendrías que usar vários archivos de imagen para cada caracter/numero y elegir aleatoriamente uno u otro .. Pero igualmente con algo de tiempo se obtendría las correspondencias "nombre archivo imagen" -> caracter/numero ... Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
Pues estuve probando el script, corregí algunos errores de sintaxis que tenía y quedó en resumen asi: Código PHP: http://localhost/sitio/includes/gd_c...isual=12345678 Me aparece el siguiente error: Uninitialized string offset: 8 in c:\AppServ\www\sitio\includes\gd_create.php on line 39 La línea 39 es esta: Código PHP:
__________________ Takitei Ingeniarte.com DannyHerran.com "Dadme un punto de apoyo y moveré la tierra" - Arquímedes. Última edición por Takitei; 27/09/2004 a las 16:58 |
| ||||
Ya lo hice funcionar. Tenía un problema con la sintaxis del for(). El code final queda asi: Código PHP:
__________________ Takitei Ingeniarte.com DannyHerran.com "Dadme un punto de apoyo y moveré la tierra" - Arquímedes. |
| |||
Hola, Una pregunta, si el objetivo es crear un codigo visual para evitar altas automatizadas, es una estupidez pasar el codigo a mostrar por URL. Ya se ha comentado eso en varias respuestas en este mensaje, y se han dado soluciones. Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Jajajajaja yo sabía que iban a decir eso. Lo coloqué solo como ejemplo para poder probarlo desde URL, el mensaje que posteé en las FAQ's ya está corregido y funciona con sesiones. Gracias de todas formas, un saludo!
__________________ Takitei Ingeniarte.com DannyHerran.com "Dadme un punto de apoyo y moveré la tierra" - Arquímedes. |
| |||
Mira que ha dado que hablar el tema pero aun no tengo un sistema fiable, he estado probando y funciona pero todavia queda colgado el problema de que pueda ser usado la alta automatica... con sesiones ya queda garantizado el que no se pueda hacer? Gracias. |
| ||||
Con SESSIONES es totalmente seguro. Hazlo con sesiones como aparece en las FAQs.
__________________ Takitei Ingeniarte.com DannyHerran.com "Dadme un punto de apoyo y moveré la tierra" - Arquímedes. |
| ||||
checaste muy bien que es lo que te dice la pura imagen de libraries/thumbnails.php?do=generateimage Checa el mensaje que te dá. Tiene que darte un mensaje de error en PHP, si es facil de corregir ponlo |
| ||||
Prueba la página en el Internet Explorer siempre y cuando no tengas el SP2. Ahí podrás ver exactamente cuál es el error.
__________________ Takitei Ingeniarte.com DannyHerran.com "Dadme un punto de apoyo y moveré la tierra" - Arquímedes. |
| ||||
Pues ... Sip he probado la pagina en IExplorer y no me da nigun error simplemente que me pone el cuadrito. Incluso hice lo mismo que dice el tutorial, o sea, crear las cuatro paginas independientes y nada. MI libreria GD2 esta funcionando correctamente, pues ya lo he checado con el phpinfo(). Salu2
__________________ Ing. Reynier Pérez Mira |
| |||
No sé si en este mensaje ya se ha comentado (alguna vez lo he mencionado no recuerdo si en este mismo mensaje) .. Para evaluar que tienes problemas con la generación "dinámica" de imagenes .. debes hacer algunas cosas para ir "viendo el error" para que cuando lo veas sepas que sucede y en consecuencia poder dar una solución al problema. 1) llama a tu script que genera la imagen de forma independiente por el URL: http://...... 2) Si ahí no ves ya un mensaje de error: comenta las líneas de header() que tenga el script en cuestión. Por aquí ya deberías ver algún tipo de error. Ten presente que si usas el código propuesto con la corrección del uso de sesiones .. el código que genera la imagen lo hace en función de esa variable de sesión .. así que tendrás que hacer pruebas con algún dato fijo que simule el dato que podría tener tu variable de sesión . .así veras por ejemplo entre otras cosas que tal vez puedas tener problemas con las sesiones (con la propagación del SID y no te esté tomando el valor de tu varaible de sesión que contiene el dato que se va a representar gráficamente). Así mas o menos se evalua en general problemas con "cabeceras" y generación de imagenes dinámicamente. Pruebalo y nos comentas .. Un saludo, |
| |||
$codigo=$_SESSION['mipass']; pra hacer activo este codigo q hay q hacer?? xq al ponerlo en dreamweaver me sale esto mismo $codigo=$_SESSION['mipass']; al probarlo
__________________ -------------------------------------------------- [::Matthew Beyer::] MaEsTrOsWeB Chile -------------------------------------------------- |
| |||
Cita: Pero .. "donde pones" ese código? .. que es eso de hacerlo "activo"? .. No confundas un editor de Código con el entorno de pruebas de tus aplicaciones escritas en PHP: tu servidor HTTP (Apache o el que uses) y el própio PHP.
Iniciado por Matthew_182 $codigo=$_SESSION['mipass']; pra hacer activo este codigo q hay q hacer?? xq al ponerlo en dreamweaver me sale esto mismo $codigo=$_SESSION['mipass']; al probarlo Un saludo, |