register_globals y seguridad en PHP

El hecho de cambiar register_globals a modo "on" , ¿Como puede ser afectada la seguridad?

La FAQ register_globals y seguridad en PHP tiene

Pertenece a la categoría:
Pregunta
El hecho de cambiar register_globals a modo "on" , ¿Como puede ser afectada la seguridad?
Respuesta de Miguel Angel Alvarez
Si las variables que llegan por un formulario se declaran automáticamente en la página podría ocurrir que un visitante "avispado" modificase a mano la lista de variables pasadas por la URL con intención de crear alguna variable necesaria para realizar algún tipo de acción, posiblemente no autorizada, en nuestro sitio web.


No se si la idea queda clara, pero en el supuesto de que nosotros estuviéramos utilizando una variable de sesión, llamada autorizado y con valor “si”, para saber si un usuario se ha autentificado correctamente, un posible atacante podría introducirla a través de la URL.


www.tudominio.com/pagina.php?autorizado=si


El tema es que, por motivos de seguridad, se recomienda acceder a cada variable de servidor (Variables de sesión, de fomularios, pasadas en la URL, etc.) indicando las vías por las que ha sido declarado, por ejemplo:


HTTP_POST_VARS


HTTP_GET_VARS


Aunque a partir de determinada versión de PHP se puede acceder también por las abreviaciones:


_GET


_SESSION


_COOKIE


...

Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Antonio

11/4/2007
En el caso de los arrays que no han sido declarados (PHP no requiere declarar las variables) la situación es aún más grave, pues se puede inyectar un elemento en un array sin que el programador sea consciente de ello.
Register_globals debería estar siempre desactivado. No harás un programa más seguro, pero evitarás un coladero de variables sin control que, combinadas con despistes al programar (caso del ejemplo citado) pueden dar lugar a fallos serios.
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías