work variable superglobales register_globals php_flag not manejo htaccess globales does activar php register-globals

php - variable - Hacer que el código funcione con register_globals desactivado



variables globales php (4)

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];



Si configura el informe de errores en E_ALL, advierte en el registro de errores sobre variables indefinidas completas con nombre de archivo y número de línea (suponiendo que esté iniciando sesión en un archivo). Sin embargo, solo avisará si aparece una variable indefinida, por lo que creo que deberá probar cada ruta del código. Ejecutar php desde la línea de comandos no parece ayudar también.

Hay una herramienta de depuración llamada xdebug, no la he probado, pero ¿puede ser útil?