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.

http://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».

[php]
//
// http://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});");
}
}
[/php]


Publicado

en

,

por

Comentarios

Deja una respuesta

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