image
Inicio » PHP » Artículos sobre PHP » La directiva register_globals en PHP 4.2.0




La directiva register_globals en PHP 4.2.0

 
Por Joaquin Gracia
Artículos publicados: 7
Valoración media: 3.65/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


Más artículos

Valoración

Este artículo ha sido valorado 385 veces. Valor:  [3.89/5]   
Malo------>Normal----->Bueno
                   

Comentarios

Clever 11/02/2003

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

gonzalo 23/02/2003

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

Enrique Barchiesi (ebarchiesi@netscape.net)26/02/2003

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.


Ivan Rodriguez (epplestun@zonaphp.com)05/03/2003

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.

Javier Robles (cibertec@hotmail.com)14/03/2003

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);

David López (davidlopez@ciudad.com.ar)08/05/2003

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.

tavo 17/07/2003

gracias david....me estan funcionando perfectos los scripts con extract($_POST,EXTR_SKIP);

fue de gran ayuda.

Tavo
Medellin-Colombia.

Miki 21/08/2003

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.

Nombre:
E-Mail: (opcional)
Los comentarios son moderados, no aparecen inmediatamente, son leídos por el administrador y publicados según el interés para otros lectores.

Se reserva el derecho de publicación de los comentarios introducidos.

Colabora

¿Te sientes capacitado para escribir un artículo como este? ¿Te gustaría colaborar escribiendo artículos en WebEstilo? Háznoslo saber !!









Comparte



 
Valid HTML 4.01!
Última modificación:31 de Agosto de 2017. Spain - Espa�a.
© 1998-2004 por . Todos los derechos reservados.