Pregunta

He heredado algo de código PHP heredado que se escribió cuando era una práctica estándar utilizarlo. register_globals (A partir de PHP 4.2.0, esta directiva está desactivada de forma predeterminada, publicada en 22.abril de 2002).

Ahora sabemos que es malo para la seguridad tenerlo habilitado.El problema es ¿cómo encuentro todos los lugares en el código donde necesito usar $_GET o $_POST?Mi único pensamiento era configurar el informe de errores para que advirtiera sobre 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á una advertencia por archivo?

¿Fue útil?

Solución

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

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

Otros consejos

escribí un guion usando el incorporado Tokenizador funciones.Es bastante tosco pero funcionó para el código base en el que estaba trabajando.Creo que también podrías usar CódigoSniffer.

Puede "falsificar" manualmente el efecto de registro global pero agregar algo de seguridad.(En parte tomé esto de la bifurcación de 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 querrás modificarlo para que tu código sea más seguro, al menos agregando tus variables de configuración global (como la ruta y la URL base) a la lista global incorrecta.

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

Sé que hay una manera de establecer los valores de php.ini para ese script con un determinado comando, así que busqué y encontré esto también: Ir a la última publicación en la página

También encontré la siguiente publicación que puede ser útil: Ir a la última publicación de la página.

Agregaré más a esto si nadie ha encontrado una respuesta, pero ahora debo tomar un tren.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top