Foros del Web » Programando para Internet » PHP »

¿Regiser Glovals en off o en on?

Estas en el tema de ¿Regiser Glovals en off o en on? en el foro de PHP en Foros del Web. Seguimos con questiones: Con todo este cambio de servidor que he realizado, no me funcionaban mis páginas en PHP y me preguntaba por qué. Llamé ...
  #1 (permalink)  
Antiguo 02/10/2003, 05:34
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 5 meses
Puntos: 0
¿Regiser Glovals en off o en on?

Seguimos con questiones:

Con todo este cambio de servidor que he realizado, no me funcionaban mis páginas en PHP y me preguntaba por qué. Llamé a soporte y me dijeron que el problema estaba en las register glovals.

Yo siempre he escrito las variables de forma : if (!empty($proceso)) {
pero al parecer ahora tengo que hacerlo: if (!empty($_GET["proceso"])) {

¿Por qué se debe?, es mejor este modo por alguna causa pese a lo tedioso de tener que poner el $_GET[""] continuamente?

¿Hay alguna forma de cambiarlo indicando algo al inicio de mis archivos php?

Pufff... es que no me apetece tener que cambiar las 4000 variables denuevo....

Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 02/10/2003, 05:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola, (creo que deberia de dejar de usar este comienzo para todos los mensajes)

Si miras en el mensaje de las FAQs, creo que fue Cluster el que explico las consecuencias de usar register_globals a ON o OFF.

Comentarte que el $_GET es para las variables que mandas por URL o por formularios GET, $_POST para formularios POST, $_SESSION para variables de sesion, $_COKIIE para las cookies y $_SERVER para las variables $PHP_SELF, $DOCUMENT_ROOT, etc.

Existe la funcion extract() (www.php.net/extract) que permite crear una variable para cada elemento de un array. Aplicandolo a los arrays $_GET, $_POST, ... al comienzo de un script "simula" el register_globals a ON.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 02/10/2003, 08:30
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Haciendo uso de lo que comento josemi puedes hacer:

Código PHP:
extract($_GET);
/**
 * Esto te genera variables con los nombres del array y su valor
 *
 * $_GET['variable'] = 5;
 * ahora seria $variable = 5;
 */
echo $variable// te devolvera 5 
En caso de que no puedas hacer uso de la funcion extract() intentanlo con la funcion ini_set(); esta funcion te permite modificar las directivas de configuracion de tu php.ini, yo lo suelo usar mucho para PHP-GTK, en un servidor web ... no lo activaria yo ... pero bueno tu intentanlo :P

Saludillos!!!!!
__________________
Usuario registrado de Linux #288725
  #4 (permalink)  
Antiguo 02/10/2003, 10:23
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 5 meses
Puntos: 0
Vale, ya he hablado con soporte y me las han puesto en ON, muchas gracias por la información. Lo que quisiera es hacer, a partir de ahora las páginas "bien hechas", osea, con $_get etc.

¿Si mi máquina tiene las globals en OF, la seguridad que implica poner variables tipo $_GET, $_POST... no valdrá? o es lo mismo?
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #5 (permalink)  
Antiguo 02/10/2003, 14:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Si accedes a un valor por el array $_GET, tienes la seguridad de que el origen de ese dato viene de la URL y no de un POST ni de una cookie. Sin embargo, todavia tienes que tener cuidado con el codigo que escribas. El ejemplo de siempre:
Código PHP:
<?php
if (("clave"==$_POST['clave']) && ("usuario"==$_POST['usuario'])) {
  
$ok=1;
}
if (
$ok) {
  echo 
"Bienvenido a la zona secreta.";
} else {
  echo 
"Usted no esta autorizado";
}
?>
Esto lo completas con un cutre formulario con los dos campos, y lo pones en un servidor con register_globals a On. Y prueba a entrar desde el formulario. Parece que funciona bien. Y ahora prueba a entrar poniendo directamente la URL de ese codigo pagina.php?ok=1 y mira lo que pasa. Y prueba eso mismo en un servidor con register_globals a OFF.

De todas formas, es solo codigo con un bug. Un bug oculto, que puede que lo veas si tienes error_reporting a E_ALL. Un bug que es un agujero de seguridad. Con lo sencillo que es acostumbrarse a inicializar todas las variables que sabes que son locales:
Código PHP:
<?php
$ok
=0;
if ((
"clave"==$_POST['clave']) && ("usuario"==$_POST['usuario'])) {
  
$ok=1;
}
if (
$ok) {
  echo 
"Bienvenido a la zona secreta.";
} else {
  echo 
"Usted no esta autorizado";
}
?>
Hay que coger buenas costumbres a la hora de programar.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 03/10/2003, 02:57
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 5 meses
Puntos: 0
Y no sería más fácil poner:
Código PHP:
<?php
if (("clave"==$_POST['clave']) && ("usuario"==$_POST['usuario'])) {
echo 
"Bienvenido a la zona secreta.";
} else {
  echo 
"Usted no esta autorizado";
}
?>
¿Y nos ahorramos posibles "malentendidos" en el código?

De todas formas no entiendo lo de $ok=0;, ¿es que significa lo mismo que $ok='';?

De todas formas, todo lo que respecta a variables globales queda comprendido, espero a partir de ahora no ser perezoso y usar las variables como se tienen que usar.

Gracias!!
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #7 (permalink)  
Antiguo 03/10/2003, 03:20
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
El tema del $ok = 0 es para tener la variable definida ya con un valor, en caso de que pasases por URL la variable OK te daria un Notifice diciendote que no tienes definida la variableel caso es que para mas seguridad jeje se deberia de trabajar integramente con variables locales ya que las globales no son muy seguras, es decir, hacer uso de los arrays asociativos
__________________
Usuario registrado de Linux #288725
  #8 (permalink)  
Antiguo 03/10/2003, 03:57
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 5 meses
Puntos: 0
Vaya, genial!!! no lo sabía.

¿No creen que se deberían hacer unas FAQS sobre "buenas maneras" en las que se recomienden cosas como estas de definir siempre las variables, etc... ?
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #9 (permalink)  
Antiguo 03/10/2003, 04:01
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
si no me equivoco creo que ya esta jaja
__________________
Usuario registrado de Linux #288725
  #10 (permalink)  
Antiguo 03/10/2003, 04:07
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 15 años, 5 meses
Puntos: 0
Jeje, no me refiero a las FAQS de PHP, sino ha recomendaciones de cómo declarar variables, de cómo generar arrays de forma más óptima, cosas que a lo mejor a gente como yo no se nos ocurren por que en ningún libro (al menos que me alla leido yo) explican "es recomendable declarar la variable antes de tomarla de una URL o un FORM" y que ustedes, maestros del PHP por el uso y la práctica siempre realicen.

Pero es igual, es una tontería. Lo mejor es leerse las preguntas que surgen en este foro. Un saludo chicos y gracisa por la ayuda prestada!!!!
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
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.
Respuesta




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