Solventar problemática register_globals en servidores comerciales

PHPRegister_globals es una variable de configuración, que existe desde las versiones mas tempranas de php. Controla la disponibilidad de las variables que se envia a un script php mediante metodos POST, GET, o variables procedentes de las COOKIES.

Con register_globals activo, cualquier variable enviada, por ejemplo en una url, queda automáticamente declarada en el código php como si la hubieramos incluido mediante la instrucción var $variable;

Eg.

//tld.com/test.php?mivar=hola

equivale a que en test.php se hubiera declarado la variable como:

var $mivar = ‘hola’;

Desde la versión PHP 4.2.0 el valor de register_globals está puesto a “off” debido a los riesgos de seguridad que implica ya que podemos inyectar variables a un código php sin control.

La manera más sencilla de eliminar la problemática de seguridad de register_globals consiste en poner a “off” el valor dentro del fichero php.ini.

En otros casos, cuando no tenemos acceso a la configuración del servidor podemos utilizar el script “fix_register_globals.php” que os adjunto.

Esencialmente lo que hace el script es recorrer las estructuras superglobales $_POST, $_GET y $_REQUEST, obteniendo el nombre de las variables para eliminarlas del entorno mediante el uso de la función “unset”.

// 
// //es.php.net/manual/es/security.globals.php#76550
// 
if (ini_get(register_globals))  // If register_globals is enabled
{ // Unset $_GET keys
  foreach ($_GET as $get_key => $get_value) {
    if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $get_key)) eval("unset(\${$get_key});");
  } // Unset $_POST keys
  foreach ($_POST as $post_key => $post_value) {
    if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $post_key)) eval("unset(\${$post_key});");

  } // Unset $_REQUEST keys
  foreach ($_REQUEST as $request_key => $request_value) {
    if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $request_key)) eval("unset(\${$request_key});");
  }
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *