La directiva register_globals en PHP 4.2.0
|
Por Joaquin Gracia |
 |
Art�culos publicados: 7
Valoraci�n media: 3.64/5 Usuario desde: 20/06/1998
|
|
A partir de la versi�n de PHP 4.2.0 el valor por defecto de la directiva register_globals es off. El por qu� de este cambio viene motivado por un aumento del nivel de seguridad en la configuraci�n del PHP por defecto. Pero esto puede provocar que nuestras p�ginas dejen de funcionar.
La directiva register_globals cuando esta activada (estado que estaba por defecto antes de la versi�n 4.2.0 de PHP), provoca que autom�ticamente se generen variables globales para cookies y valores enviados por get y post entre otros.
Por ejemplo:
Si llam�bamos a una p�gina con http://www.internet.com/prueba.php?var1=4, esto provocaba que en la p�gina prueba.php autom�ticamente se generase la variable $var1 con el valor 4.
Por razones de seguridad este comportamiento autom�tico se ha cambiado, estableciendo el valor por defecto de register_globals a off.
Este cambio puede producir que nuestras antiguas p�ginas dejen de funcionar, ante esto tenemos dos opciones:
- Activar el register_globals a on.
- Dejar register_globals a off y cambiar nuestras p�ginas por las referencias adecuadas a cada caso. Esta es la opci�n m�s recomendable.
�C�mo debemos hacer este cambio?
Debemos buscar todas aquellas variables que son definidas autom�ticamente, variables del servidor, que provienen de get o post, cookies, files, variables de entorno o sesi�n.
Reemplazar esas variables por las referencias adecuadas en cada caso, en PHP se han definido unos arrays diferentes con valores, dependiendo del lugar de procedencia. As� tenemos los arrays $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION.
Si por ejemplo ten�amos el siguiente script:
print "Su edad: ".$edad; //cookie
print "Navegador: ".$HTTP_USER_AGENT;
print "Variable: ".$var; //variable de get
Deber�amos reemplazarlas por:
print "Su edad: ".$_COOKIE['edad']; //cookie
print "Navegador: ".$_SERVER['HTTP_USER_AGENT'];
print "Variable: ".$_GET['var']; //variable de get
Para m�s informaci�n:
Bio: Joaquin Gracia es Ingeniero superior en Inform�tica por Centro Polit�cnico Superior de la Universidad de Zaragoza, diplomado en inform�tica por la Escola Polit�cnica Superior de la Universidad de Gerona, Microsoft Certified Professional y entusiasta navegante de Internet desde los inicios en Espa�a.
Otros art�culos recientes de este autor: |
Fecha publicaci�n: 02/02/2003
Valoraci�n
Este art�culo ha sido valorado 385 veces. Valor:


[3.89/5]
Comentarios
si se desactiva los register globals una opcion rapida para usar las variables de un formulario en forma directa puede ser incluir este fragmento en la cabecera de los scripts:
<?php
foreach($_POST as $k=>$v){
$$k=$v;
}
?>
lo mismo se podria usar para $_GET, $_COOKIE, $SERVER
Hombre si haces eso pues no desactives el Register Globlas y ya esta. Esta claro que ese script funciona pero etamos ante el mismo problema. Recordemos que se hace por seguridad
Saludos Gonzalo
Una buena manera de realizar p�ginas en php que admita el viejo formato es el siguiente:
if (!isset($_server["PHP_SELF"]))
{
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_SESSION = $HTTP_SESSION_VARS;
}
a partir de alli podremos tomar las variables como arrays estemos o no con la opcion GLOBALS activada.
Ej:
$nombre = $_GET["nombre"];
tomara la varable nombre de igual manera
Espero que se entienda, sirve mucho para unificar el c�digo de php para todos los sitios.
Mucho m�s facil que eso es poner
ini_set("register_globals","1");
Y asi usas de modo global todas las variables :-)
Claro esta si tenemos avilitada la funci�n ini_set() en nuestro server.
Se debe utilizar register_globals = on, por los motivos expuestos.
Existe una forma m�s eficiente de modificar los programas antiguos sin invertir mucho tiempo cambiando las lineas de c�digo.
Es mejor utilizar una sola l�nea al inicio de cada script que diga lo siguiente :
extract($_GET);
Con solo esta l�nea nuestros programas funcionaran como lo ven�an haciendo antes de la versi�n 4.2.0
Con este peque�o cambio, en lugar de cambiar cada l�nea en donde aparece la variable, ej:
print "Variable: ".$_GET['var'];
Dejamos intacta la l�nea de c�digo, ej:
print "Variable: ".$var;
Hacer lo mismo de acuerdo a cada procedencia de la variable, ej:
extract($_POST);
Habria que aclarar que si se usa:
extract($_POST);
en caso de existir variables con el mismo nombre, se sobreescriben sus valores. Para evitar esto, en lugar de lo anterior habria que hacer:
extract($_POST,EXTR_SKIP);
con lo que quedarian los valores originales.
gracias david....me estan funcionando perfectos los scripts con extract($_POST,EXTR_SKIP);
fue de gran ayuda.
Tavo
Medellin-Colombia.
Pues no consigo hacer funcionar
extract($_POST,EXTR_SKIP); lo sit�o al
principio de las p�ginas y no funciona.
Estoy haciendo las pruebas con un sistema de
paginaci�n que pasa la variable a la misma
p�gina y no funciona. En cambio el
extract($_GET); me funciona a medias, no s�
porque en alg�n n�mero de p�gina no
funciona y salta al primero.
Rodrigo Arenas | 09/11/2005 |
No use extract() en datos no confiables, como entradas de usuario ($_GET, ...). pero si lo hace, por ejemplo, si quiere correr codigo anterior que conf�a temporalmente en register_globals, asegurese de que usa una de los valores de no-sobreescribir del par�metro tipo_extraccion tales como EXTR_SKIP y asegurese de extrar las variables $_SERVER, $_SESSION, $_COOKIE, $_POST y $_GET ese orden.
A�adir un comentario
Si no est� de acuerdo con algo o quiere a�adir m�s informaci�n al respecto puede incluirla a�adiendo un comentario.
Colabora
�Te sientes capacitado para escribir un art�culo como este? �Te gustar�a colaborar escribiendo art�culos en WebEstilo? H�znoslo saber !!