Pregunta

Estoy trabajando en aplicaciones construidas hace años, que recientemente ha dejado de funcionar correctamente. programador de edad, dijo, para que pudiera estar accediendo a las variables $_GET o $_POST sin leerlos desde $_GET[] array, sino a través de la register_globals

Quiero preguntar: (? Por ejemplo, formas directas) ¿Cuáles son las diferentes maneras en las variables de acceso sin necesidad de utilizar $_GET gama $_GET[] y, si se conoce, ¿cómo puedo comprobar si esta aplicación utiliza cualquiera de ellos

?

Gracias de antemano

Editar : Las otras maneras en que recordaba era register_globals, no magic_quotes. Además, no quiero a utilizar , pero en lugar de detectar si se ha utilizado y, en última actualización del servidor obsoleta (lo que podría explicar por qué aplicación ha dejado de funcionar correctamente)

Editar : Mi Inglés es horrible hoy. Como he explicado en una de las respuestas: Tengo que comprobar, si el programador original utiliza algún método oscura y / o en desuso de obtener las variables de cadena de consulta a PHP, por lo que la aplicación de los valores ahora trabaja con son mal / no inicializado

EDITAR IMPORTANTE : import_request_variables está fuera de la mesa, no se utiliza. Todas las matrices $_ están fuera de la mesa también, porque la última actualización no les rompió (=> todavía trabajo). ¿Cómo puedo detectar qué variables se inicializan con register_globals?

OTRO editar : He encontrado esto:

foreach ($_POST as $k => $v) {
  eval("\$".$k." = '".$v."';");
}
foreach ($_GET as $k => $v) {
  eval("\$".$k." = '".$v."';");
}

¿Podría haberse roto por uno de los último Actualizaciones (máx. 1 semana)?

¿Fue útil?

Solución

Register Globals y no Comillas mágicas ... Por cierto Registro Globals es puro mal no utilizarlas (y ya no son aprobadas a partir de PHP 5.3.0)!

Editar Si desea comprobar si la aplicación usa Register Globals, tratar de buscar los valores $_GET como variables. Por ejemplo, para index.php?id=123 tratar de buscar $id en el código PHP. Si encuentra que esto no significa que la secuencia de comandos utiliza Registros Globales pero si $id viene de ninguna parte y nunca se ha inicializado / enchufar es una señal buena (mal) que la aplicación utiliza Register Globals ...

Otros consejos

$_SERVER["QUERY_STRING"] le dará la cadena GET prima.

Dicho esto, esto suena como un problema que debe ser fijada en su raíz, no mediante el uso de una variable diferente.

Si comillas mágicas son un problema, hacer una verificación de si están habilitados, y trato con los datos entrantes en consecuencia.

Desactivación mágicas en los espectáculos manual de PHP una manera a "fijar" los datos entrantes en función de si la funcionalidad está activada o no. No es muy eficiente para grandes cantidades de datos, pero se debe hacer en una tarea cotidiana.

También tiene $ _REQUEST , magic_quotes (en desuso), sólo influiría en el contenido de las variables, no los medios de captura de ellos .

También vea import_request_variables , el codificador original puede lo han utilizado para agarrar los contenidos de una variable GET e insertarlo en otra variable que está a continuación, posteriormente se hace referencia.

Register Globals es una característica horrible que programas PHP mayores a menudo se basan en.

Con el registro de globales encienden, PHP buscará en las variables GET y POST y "promover" a los nombres de variables normales -. Ej $_GET['myvar'] podría ser accesible en el código como $myvar

Entre otras cuestiones, esto hace que el programa sea muy fácil para los hackers para romper simplemente adivinando lo demás nombres de variables que el programador pueden haber usado. Por lo tanto, la función de variables globales del registro se ha desactivado de forma predeterminada durante mucho tiempo, ya no se utiliza oficialmente, y se eliminará en su totalidad en una versión futura.

Debido a las variables que se utilizan de esta manera se hace referencia de una manera que no se distingue de las variables normales, significa que tratar de actualizar el código de edad que utiliza el registro de globales pueden ser muy difíciles. Lo hace depender mucho de lo bien escrito el código es.

El problema es probablemente de PHP register_globals . Esta opción hace que $_GET['some_var'] o su versión $_POST equivalente disponible como $some_var automáticamente. Esto es obsoleto y que definitivamente no debe usarlo, pero el otro programador podría haberlos utilizado en dicha aplicación.

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