Foros del Web » Programando para Internet » PHP »

Problema de seguridad con variables globales

Estas en el tema de Problema de seguridad con variables globales en el foro de PHP en Foros del Web. El problema es que cuando hay una variable en $_GET, $_POST, $_SESSION, $_COOKIE, $_REQUEST o $_SERVER con el mismo nombre que una variavle global establecida ...
  #1 (permalink)  
Antiguo 03/06/2007, 16:15
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 5 meses
Puntos: 4
Problema de seguridad con variables globales

El problema es que cuando hay una variable en $_GET, $_POST, $_SESSION, $_COOKIE, $_REQUEST o $_SERVER con el mismo nombre que una variavle global establecida en mi script, la de mi script es sobreescrita con una de estas superglobales.

¿como puedo invertir el comportamiento? ¿que mis variables declaradas sobrescriban las superglobales?

estoy en Kubuntu Feisty Fawn 7.04, PHP 5.2.1
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 03/06/2007, 16:22
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Problema de seguridad con variables globales

Por favor, pon un pequeño código de ejemplo.
Saludos.

PD: Una forma de protección es desactivar las variables globales y si no lo puedes hacer siempre inicializa las variables.

O sea, antes de usar la variable $var, debes inicializarla como por ejemplo $var = ''; u otra manera. Saludos
  #3 (permalink)  
Antiguo 03/06/2007, 16:28
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 5 meses
Puntos: 4
Re: Problema de seguridad con variables globales

mmm, acá un hecho curioso. por ejemplo, si hago:

index.php?variable=valor

y el script:

Código PHP:

$variable 
'cosa';

echo 
$variable
Retorna 'cosa' como debiera ser, pero con esto:

Código PHP:
if(isset($_GET['menu'])) {
    
$menu Modulos::buscar_menu($_GET['menu']);
    if(
$menu$_SESSION['menu'] = $_GET['menu'];
} elseif(isset(
$_SESSION['menu'])) {
    
$menu Modulos::buscar_menu($_SESSION['menu']);
} else {
    
$menu Modulos::buscar_menu('principal');
}
$smarty->assign('menu_list'$menu); 
Dependiendo del caso, me sobreescribe $menu con $_GET['menu'] o con $_SESSION['menu'].

Eso es lo extraño, la solución provisoria que encontré fue cambiarle el nombre a $menu por $menu_list.

El punto es que no puedo desactivar los registros globales, pk tengo otros prefabricados corriendo que no funcionan con register_globals en off.

Pero si puedo manipular otras directivas del php.ini
__________________
Blog | Tecnosquad
  #4 (permalink)  
Antiguo 03/06/2007, 16:59
Avatar de tutorialphp  
Fecha de Ingreso: junio-2007
Mensajes: 31
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Problema de seguridad con variables globales

Cita:
Iniciado por ArrauKano Ver Mensaje
mmm, acá un hecho curioso. por ejemplo, si hago:

index.php?variable=valor

y el script:

Código PHP:

$variable 
'cosa';

echo 
$variable
Retorna 'cosa' como debiera ser, pero con esto:

Código PHP:
if(isset($_GET['menu'])) {
    
$menu Modulos::buscar_menu($_GET['menu']);
    if(
$menu$_SESSION['menu'] = $_GET['menu'];
} elseif(isset(
$_SESSION['menu'])) {
    
$menu Modulos::buscar_menu($_SESSION['menu']);
} else {
    
$menu Modulos::buscar_menu('principal');
}
$smarty->assign('menu_list'$menu); 
Dependiendo del caso, me sobreescribe $menu con $_GET['menu'] o con $_SESSION['menu'].

Eso es lo extraño, la solución provisoria que encontré fue cambiarle el nombre a $menu por $menu_list.

El punto es que no puedo desactivar los registros globales, pk tengo otros prefabricados corriendo que no funcionan con register_globals en off.

Pero si puedo manipular otras directivas del php.ini
Prueba con éste código y nos cuentas:

Código:
<?php
function addslashes__recursive($var){
if (!is_array($var))
return addslashes($var);
$new_var = array();
foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
return $new_var;
}
$_POST=addslashes__recursive($_POST);
$_GET=addslashes__recursive($_GET);
$_REQUEST=addslashes__recursive($_REQUEST);
$_SERVER=addslashes__recursive($_SERVER);
$_COOKIE=addslashes__recursive($_COOKIE);
?>
Saludos
  #5 (permalink)  
Antiguo 03/06/2007, 17:04
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 5 meses
Puntos: 4
Re: Problema de seguridad con variables globales

mmm no se que hace esa funcion que pusiste, pero creo que encontré el motivo de la sobreescritura:

la linea:

if($menu) $_SESSION['menu'] = $_GET['menu'];

podría estar sobreescribiendo en forma global $menu. En tal caso, no tengo otra manera de hacerlo más que cambiarle el nombre a la variable, o hacer register_globals off.
__________________
Blog | Tecnosquad
  #6 (permalink)  
Antiguo 03/06/2007, 22:40
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Problema de seguridad con variables globales

Bien has dicho.-
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 04:59.