Foros del Web » Programando para Internet » PHP »

Código de seguridad en formulario registro!

Estas en el tema de Código de seguridad en formulario registro! en el foro de PHP en Foros del Web. Que tal amigos, me podrían decir como es que construyo y como funciona ese código de seguridad que se está utilizando mucho en la actualidad ...
  #1 (permalink)  
Antiguo 07/10/2004, 12:14
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Código de seguridad en formulario registro!

Que tal amigos, me podrían decir como es que construyo y como funciona ese código de seguridad que se está utilizando mucho en la actualidad en los formularios de registro con la finalidad de evitar altas automáticas?

No se si ya exista una clase de ese estilo, porque practicamente lo quiero igualito al que esta en miaaroba.. http://miarroba.com/usuarios/nuevo.php
  #2 (permalink)  
Antiguo 07/10/2004, 13:07
 
Fecha de Ingreso: septiembre-2004
Ubicación: Puebla, México
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
Creo que aqui hay un tutorial de lo que buscas: http://www.devshed.com/c/a/PHP/Security-Images-in-PHP/

Y aqui un script que te hace eso:
http://www.rushtheweb.com/products.php?cmd=FormProtect

espero que te sirva, saludos
__________________
Revista DdS
Revista on-line sobre desarrollo de software
  #3 (permalink)  
Antiguo 07/10/2004, 13:27
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Gracias amigo, en verdad te agradezco la ruteada, voy a checar los links!!

Saludos!
  #4 (permalink)  
Antiguo 07/10/2004, 15:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En las FAQ's de este foro (de las últimas, a fecha de hoy) tienes otro ejemplo.

Un saludo,
  #5 (permalink)  
Antiguo 08/10/2004, 10:13
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Que es lo que pas si no veo el código!?

Que tal, pues he estado haciendo algunas pruebas, he bajado algunas clases y con todas me ha sucedido lo mismo, me despliega el formulario de prueba, pero la imágen con el código de seguridad no es mostrada, solo me aparece el vínculo de la imágen rota, es decir, el espacio de la imágen con un tache.

Viendo en mi info.php revise que mi versión soporta la librería para imágenes GD, y el path hacia los includes siempre es correcto.

¿Que puede ser?

Saludos!
  #6 (permalink)  
Antiguo 08/10/2004, 10:35
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Bueno, estoy algo preocupado, resulta que sigo bajando y probando clases, pero la imágen de seguridad sigue sin generarse, es decir que me estoy preguntando si en realidad mi php esta configurado de manera correcta para permitirme usar GD y generar imagenes a partir de esto.

Entre a la pagina de GD y quise bajar la librería para instalarla, pero justo antes me dijo que si yo poseía un PHP 4.3 o mayor, mi PHP ya venía por defecto con esta característica, y resulta que yo tengo un 4.3.4 y según yo veo si esta habilitada la librería...

--with-gd' '--enable-gd-native-ttf' '--without-gdbm'

Podría alguien decirme si estoy en lo correcto o no?

http://www.chkt.com.mx/info.php

Saludos y gracias!
  #7 (permalink)  
Antiguo 08/10/2004, 10:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo mejor es que salga de dudas probando un ejemplo simple que uses GD .. En tu caso tu phpinfo() dice que las tienes instaladas ... y además que usas la versión 2.x de GD lo cual no te tendría que dar problemas en ningún caso. Si quieres probar algo más simple de GD: www.php.net/gd .. ahí tienes ejemplos en todas las funciones relacionadas con GD.

Ahora, .. puedes tener problemas de otro tipo .. problemas con rutas u otros detalles que NO verás si siempre llamas a tus scripts que generan ese código por un tag de imagen <img src="generacodigo.php"> que es lo que se suele usar .. Para evaluar el problema debes llamar a ese "generacodigo.php" que genera tu imagen vía GD de forma directa por el URL: http://www.tal.tal/generacodigo.php o similar y a ser posible quitar/comentar la línea que hace referencia a header() del mismo para que veas completamente los errores que obtengas. En función de ese error se podrá ver que pasa.

Un saludo,
  #8 (permalink)  
Antiguo 08/10/2004, 10:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Otro detalle ..

Deberías decidirte por uno de tantos ejemplos que has probado, poner el código aquí en este mensaje, hacer las pruebas que te he comentado con ese código y si obtienes errores .. mostrarlos aquí al foro de forma textual.

Un saludo,
  #9 (permalink)  
Antiguo 08/10/2004, 11:10
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Según veo, si me genera lás imágenes

Pues según lo que estoy viendo, si me genera la imágen, en todas las clases me regresa un Notice de variable no definida que se refiere a la cadena de código , pero el resultado que me muesta al final es el código de la imágen.

<br />
<b>Notice</b>: Undefined variable: str in <b>/home/cadi/etest/admin/registronuevo/vimage/vImage.php</b> on line <b>131</b><br />
<br />
<b>Notice</b>: Undefined variable: str in <b>/home/cadi/etest/admin/registronuevo/vimage/vImage.php</b> on line <b>133</b><br />
‰PNG


IHDR …ö¡¡IDATxœÝšMH[A€Çj©„¢"Õ¶C@éIšmi.
…ŠP<ÄS)z’ÒKJ± (…ôPÚ"E=ÙƒÒ!^˜–H± Â;D$
…Tl ‡ÁǺoߺÙ÷c쇇°îìÌÛÉÌìÛLÌÄà,‰é¯¹GÀå¹Rx›lÃÏG¾îF-ßï¦7žÍݧd9Ì5ü™þ{²jíÉÖÃOwùzKSéæ=fÚr>¥©ôû·HK2 {±î›÷¨i;*ù;¿opÖA©Ù‘Ò«/Í"zí¢ÔP5j¡ˆjœÓŸ¬+U9g>¤aEtY>Éå5M
u–>‡ÊtÇ•
9Çß²š*Žª!Sí¹ŸT± à¬%‘Cv=΂‘ØìH)àé5ÚæÁÏ¿®PCo¤œ
Ê£wí¶ŠM9öx#Ô`\©ô'ëÝ1éŒ,î‡'$夬C;Ø!ÒÞ…žì¤ÓZ0|™ÿê ÉN¦½ VV––EåíÑùŸ‘@ÆÁQmsØ×'¾Ã¾¾¨¶)!ÈÄý ¾\¸Áÿœü|04ؾþÝL0QÞxz÷ÑEǬcÓ 'F…oÐת–cNv:?7†Ú Tœ7ËÏfi9KRÅQËêîÙÁ ¯Ãì‘EÀM£°² I“è†Z|`æʶ?°Qsü¢ôÚŽU“±ôu¸à#ª–ëOÖŸÀJµ‚¤µ– ÎÇ üLé%ÅÝ4¿. `~¦ Uµœ„-~—uñRq¾ZA;“Ë)eÌŸÉl¬JX††9«í‡'øåÌv.ý!Kß©«ÑÇŽ*Ú
È—%÷•´ƒ™÷ ŽB&꜆70MÇã‡×–,j<¼¶Ôt<ŽùÆâRü³4’y:—¨ƒ¶:±×zÉÏŽ ¨^ËŒªkñMÚÄô“Èû óÁT-G–@‹0mào¨„v‘J .~§Æ,-~#íµfq»`L*²”1r9E
RùÍ!lLÛÁü£Ö˶xýk<
G‹wýdø63çð/ÆõüŒ',iK9m¹C*G0<x£‚xm÷
œÆ1†rµ/Áçb¾â×vºžÞDyÛ^óÄ1=dÕH%>µÎ҆͵úsž úáH¤‚
cçØiÍ×[vtÌzw°çF°S‡¤Ú®Òªƒ‡êÝ9^1¶éõ
vêPºÌ^ìv¤£ÅŒÖü·Þ©Ãìøqì"úŸÔZh\(4IEND®B`‚

Tambien probé a hacer una imágen yo mismo y el resultado fué satisfactorio, obtuve un rectángulo de color azul, con un texto dentro.

La verdad no tengo ni idea del porque de los errores!!
  #10 (permalink)  
Antiguo 08/10/2004, 11:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues esos "notices" son los que están "molestando" a las cabeceras HTTP y por eso no te funciona.


Podrías poner el código que usas actualmente (ese que generea esos errores) y vemos como solventar el problema ..

En princpio se trataría de bajar el nivel de errores que PHP muestra para ese script al menos con la función:

error_reporting() (usala al principio de ese script)
Por ejemplo podrías usar:

error_reporting(E_ALL ^ E_NOTICE);

es decir . .que se muestren los errores "graves" pero no los "avisos" como esos "notice"
más info:
http://www.php.net/error_reporting

Pero, .. esos "notice" deberían ser solventados de otra forma . .por ejemplo usando funciones como isset() o empty() dependiendo del caso para dar valores por defecto o no acceder a variabels que no se han definido si corresponde.

O incluso sea un problema a la hora de recoger esa variable "str" .. por intentar accederla de forma global $str cuando debería ser tal vez $_GET['str'] y eso es lo que te está "avisando" ese error. (eso sucedería por usar código "viejo" no adaptado a los standares de "register_globals" ON de hoy por hoy que tal vez uses esa configuración en tus servidores. En tu caso está a ON así que toda variable debes accederla por sus arrays superglobales: $_POST, $_GET .. etc .. LEE las FAQ's de este foro .. de las primeras se comenta todo este tema )

Un saludo,
  #11 (permalink)  
Antiguo 08/10/2004, 13:05
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
0k

bueno, las variables de esos notices son generados a partir de las llamdas a funcion que hace el script, no vienen de ningun otro lado.

class vImage{

var $numChars = 3; # Tamanho da String: default 3;
var $w; # Largura da imagem
var $h = 20; # Altura da Imagem: default 15;
var $colBG = "188 220 231";
var $colTxt = "0 0 0";
var $colBorder = "0 128 192";
var $charx = 20; # Espaço lateral de cada char
var $numCirculos = 10; #Numeros de circulos randomicos


function vImage(){
session_start();
}

function gerText($num){
# receber tamanho da string
if (($num != '')&&($num > $this->numChars)) $this->numChars = $num;
# gerar string randmica
$this->texto = $this->gerString();

$_SESSION['vImageCodS'] = $this->texto;
}

function loadCodes(){
$this->postCode = $_POST['vImageCodP'];
$this->sessionCode = $_SESSION['vImageCodS'];
}

function checkCode(){
if (isset($this->postCode)) $this->loadCodes();
if ($this->postCode == $this->sessionCode)
return true;
else
return false;
}

function showCodBox($mode=0,$extra=''){
$str = "<input type=\"text\" name=\"vImageCodP\" ".$extra." > ";

if ($mode)
echo $str;
else
return $str;
}

function showImage(){


$this->gerImage();

header("Content-type: image/png");
ImagePng($this->im);

}

function gerImage(){
# Calcular tamanho para caber texto
$this->w = ($this->numChars*$this->charx) + 40; #5px de cada lado, 4px por char
# Criar img
$this->im = imagecreatetruecolor($this->w, $this->h);
#desenhar borda e fundo
imagefill($this->im, 0, 0, $this->getColor($this->colBorder));
imagefilledrectangle ( $this->im, 1, 1, ($this->w-2), ($this->h-2), $this->getColor($this->colBG) );

#desenhar circulos
for ($i=1;$i<=$this->numCirculos;$i++) {
$randomcolor = imagecolorallocate ($this->im , rand(100,255), rand(100,255),rand(100,255));
imageellipse($this->im,rand(0,$this->w-10),rand(0,$this->h-3), rand(20,60),rand(20,60),$randomcolor);
}
#escrever texto
$ident = 20;
for ($i=0;$i<$this->numChars;$i++){
$char = substr($this->texto, $i, 1);
$font = rand(4,5);
$y = round(($this->h-15)/2);
$col = $this->getColor($this->colTxt);
if (($i%2) == 0){
imagechar ( $this->im, $font, $ident, $y, $char, $col );
}else{
imagecharup ( $this->im, $font, $ident, $y+10, $char, $col );
}
$ident = $ident+$this->charx;
}

}

function getColor($var){
$rgb = explode(" ",$var);
$col = imagecolorallocate ($this->im, $rgb[0], $rgb[1], $rgb[2]);
return $col;
}

function gerString(){
rand(0,time());
$possible="AGHacefhjkrStVxY124579";
while(strlen($str)<$this->numChars)
{
$str.=substr($possible,(rand()%(strlen($possible)) ),1);
}

$txt = $str;

return $txt;
}
}
?>

Ese es el codigo que genera la imagen.

Voy a hacer lo de que me despliegue todos los errores. por otra parte, mi register_globals esta en On, lo cual mas bien quiere decir que al contrario de lo que me dijiste, no debería haber problema entre códigos viejos o nuevos, ya que la directiva esta encendida y por tanto no es necesario acceder a las variables mediante superglobales no es asi?

Saludos!
  #12 (permalink)  
Antiguo 08/10/2004, 13:16
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Caray, le meti lo del error_reporting y quedó!!!

MMMMMHHHHH!!, pues le puse como me dijiste Cluster la línea

error_reporting(E_ALL ^ E_NOTICE);

Al inicio del archivo, y con eso me mostro el código sin problemas, creo que ando muy mal en manejo de errores .

Que onda, porque perdí tanto tiempo

A final de cuentas, solo espero me digas si no hay bronca si lo dejo así, es decir, esos notices en verdad son solo avisos y no afectan tanto mi programa?


La clase que en verdad quiero usar, me pide especificar un directorio TTF y me imagino que a eso se refiere cuando me regresa esta línea.

No Truetypefont available for the CaptchaClass.

¿Se supone que por defecto ya tengo un directorio donde estas se encuentran o que debo hacer?

Saludos y en verdad, muchísimas gracias, prometo meterme mas al aspecto del manejo de errores.
  #13 (permalink)  
Antiguo 08/10/2004, 14:09
 
Fecha de Ingreso: septiembre-2004
Ubicación: Puebla, México
Mensajes: 81
Antigüedad: 19 años, 6 meses
Puntos: 0
hola yacatl,
El error de que la variable 'str' no esta definida no sera porque en el codigo que mostraste en lugar de refereciar esta variable solo como 'str' deberia ser 'this->str'?

Además me parece que session_start() deberia ser la primera linea del script php y no estar dentro del contructor de vImage.

Tambien la funcion gerString() al final, no deberia ser getString()?

Tal vez deberias jalarte una fuentes ttf de windows, ponerlas en un directorio y especificar ese directorio, no se me ocurre otra cosa

saludos
__________________
Revista DdS
Revista on-line sobre desarrollo de software
  #14 (permalink)  
Antiguo 08/10/2004, 14:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
A final de cuentas, solo espero me digas si no hay bronca si lo dejo así, es decir, esos notices en verdad son solo avisos y no afectan tanto mi programa?
Los "notice" son avisos de una práctica mala de programación .. por ejemplo:
Código PHP:
$this->postCode $_POST['vImageCodP']; 
debería ser:
Código PHP:
if (isset($_POST['vImageCodP'])){
$this->postCode $_POST['vImageCodP'];
} else {
$this->postCode '';

-------------------

En cuanto a los problemas con las "otra" classe que usas .. Ese directorio para tus TTF no debes por qué tenerlo creado en tu servidor .. Debes crearlo, subir ahí tus fuentes (tipografías) que quieras o tenga que usar dicha aplicación e indicar en la configuración de esa classe por la varaible/método que corresponda donde está ubicado ese directorio en tu servidor (con ruta ABSOLUTA hacia el).

Un saludo,
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




La zona horaria es GMT -6. Ahora son las 20:17.