Hola, antes de continuar con este post hago una pausa para declarar el objetivo primordial de este Blog, el cual es contribuir con la comunidad programadora sacando temas de esta indole y que sirvan de ayuda, ademas de servirme a mi mismo teniendo un repositorio que ayude a recordar las broncas en las que me he metido y he resuelto como programador, espero que a alguien mas le sirva.
Hoy escribire acerca de una directiva que a muchos programadores nos ah dado problemas, esta es register_globals, en PHP por supuesto.
Esta directiva se encuentra en el archivo de configuracion de php y puede tener 2 estados, On u Off, en versiones anteriores a la 4.2.0 esta aparecia por default en On y no asi en las versiones mas nuevas, por cuestiones de seguridad.
Lo que hace esta directiva al estar encendida es, que el servidor web considere a las variables EGPCS (Environment, GET, POST, Cookie, Server) como variables globales.
Esto junto con el hecho de que PHP no requiere la inicialización de variables significa que es muy fácil escribir código inseguro. Fue una decisión difícil, pero la comunidad de PHP decidió desahibilar esta directiva por defecto. Cuando está habilitada, las personas usan variables sin saber con seguridad de dónde provienen y solo queda asumir. Las variables internas que son definidas en el script mismo son mezcladas con los datos enviados por los usuarios y al deshabilitar register_globals se modifica este comportamiento.
Considera este ejemplo, con el que php.net ilustró la necesidad de cambio de configuración por defecto de PHP:
if (authenticate_user())
{
// aqui iria la función que comprobaria si el usuario
// tiene acceso a la página, y tras las comprobaciones
// establecidas, declararía “verdadero” el valor de $user_ok$user_ok = true;
}
// En teoria, si $user_ok = verdadero, el usuario esta validado
Nada mas sencillo que llamar a la página añadiendo a la url nuestra propia variable: http://www.sitio.com/log.php?user_ok=1 y estariamos validados, aunque la función authenticate_user() devolviera un valor de usuario inválido.
Para conocer el estado actual de la directiva register_globals de nuestra instalacion php, podemos hacer un echo a la funcion phpinfo(), la cual nos desglosa es status completo de la instalacion.
En caso de estar activada, simplemente necesitamos editar el archivo php.ini, buscar la directiva register_globals y cambiar el status a off.
En caso de no tener acceso completo al server, porque estamos trabajando en un host de renta o porque simplemente no somos los administradores, podemos cambiar el status de la directiva mediante el archvo .htaccess agregando esta linea:
php_value register_globals 1
Por otro lado, algunas aplicaciones como OSCommerce y muchos programadores, suelen o solian hacer sus scripts considerando que esta directiva estaria encendida, para esto necesitaremos hacer un pequeño tweak a sus scripts para que trabajen con register_globals modo Off, pero de esto platicaremos en un post mas adelante.
Saludos…

![[Deliriumlabs Blog]](http://feeds.feedburner.com/pragmatic_blog.3.gif)


