work - variables superglobales php




Hacer que el código funcione con register_globals desactivado (3)

He heredado algún código PHP heredado lo que se escribió cuando era una práctica estándar usar register_globals (A partir de PHP 4.2.0, esta directiva se desactiva por defecto, publicada el 22 de abril de 2002).

Ahora sabemos que es malo para la seguridad tenerlo habilitado. El problema es ¿cómo puedo encontrar todos los lugares en el código donde necesito usar $_GET o $_POST ? Mi único pensamiento fue establecer el informe de errores para advertir sobre las variables no inicializadas y luego probar cada parte del sitio. hay una manera mas facil? ¿Tendré que probar cada ruta de código en el sitio o PHP dará advertencias sobre la base de un archivo?


Podría 'falsificar' manualmente el efecto de registro global, pero agregar algo de seguridad. (En parte tomé esto de la horquilla osCommerce llamada xoops)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Aunque desearía ajustarlo para hacer que su código sea más seguro, al menos agregando las variables de configuración globales (como la ruta y la URL base) a la mala lista global.

También puede usarlo para compilar fácilmente una lista de todas las variables get / post usadas para ayudarlo a reemplazar eventualmente todas las ocurrencias de, digamos $ return_url, con $ _REQUEST ['return_url];







register-globals