Archivos Agosto 2009

Como responsable tecnico de una empresa de hosting tengo que mantener actualizado el software de los servidores, y entre ellos esta la version de PHP que utilizan los clientes.

Ahora bien en multiples ocasiones nos encontramos con clientes que utilizan scripts mal programados, o que fueron programados utilizando las tecnicas de versiones antiguas o incluso utilizando aun caracteristicas del lenguaje que hace años que fueron eliminadas o declaradas obsoletas.

El caso del que quiero hablar es el de register_globals.

Alla por los primeros tiempos de PHP, era comun recibir datos del usuario como una variable mas, sin distincion alguna entre las variables externas y las del propio script, a modo de ejemplo

cargando
script,php?variable=1234

podiamos acceder al valor "variable" usando simplemente $variable

<? echo $variable; ?>

este procedeer dio como resultado multiples problemas de seguridad en scripts, ante la posibilidad de interferir en variables internas en determinadas situaciones (que por abreviar no voy a enumerar, pero no me olvido del ambito de cada variable y la prioridad de los valores definidos en el script frente a los externos, etc )

La evolucion de PHP introdujo una opcion de configuracion, por aquel entonces denominada gpc_globals que permitia anular esta forma de recibir datos externos, dejando solamente los arrays autoglobales, que no se confunden con las variables normales, esa opcion fue renombrada a register_globals en PHP 4.0 beta 4, alla por el 20 de Febrero del año 2000, aunque por defecto PHP seguia con esa opcion activada.

No fue hasta PHP 4.2.0, publicado el 22 de Abril de 2002, cuando el comportamiento por defecto de PHP paso a eliminar ese problema de seguridad. Los programadores habian tenido asi un plazo de 2 años para acostumbrarse al uso de $HTTP_GET_VARS[] y demas arrays relacionados, o sus modernos sucesores $_GET , $_POST y demás.

Aún asi, los remolones webmasters demoraban la adecuacion de sus scripts al nuevo funcionamiento de PHP, ni siquiera al ser advertidos de que esa modificacion es por seguridad, no por capricho.

Cuando los administradores de los servidores cambiaban register_globals al nuevo estandar los webmasters inmediatamente pedian (en algunos casos exigian) el mantenimiento del antiguo sistema.

Hoy, 7 años mas tarde, todavia hay webmasters con scripts antiguos que se resisten a corregir esta situacion y adecuarse a las nuevas condiciones de trabajo de PHP.
Señores, han tenido 7 años!

Y si bien estoy centrando este post en el caso de register_globals, no es la unica caracteristica de PHP que ha evolucionado y que requiere del correspondiente trabajo de adecuacion por parte del webmaster.

Ejemplos:
-PHP5 prohibe la realizacion de include() de direcciones URL, tambien por motivos de seguridad.
-PHP5 introduce algunos cambios en la programacion orientada a objetos, algunos scripts no funcionan en php5
-MySQL 5.0 utiliza una variante del SQL diferente a MySQL 4.x, originando tambien incompatibilidad de algunos (pocos) scripts.

Como consecuencia, a pesar de que pasan los años, los webmasters nos obligan en ocasiones a mantener configuraciones menos seguras e incluso a mantener en algunos casos en produccion el viejo PHP4, a pesar de que hace mas de 1 año  que no se actualiza.

El Ultimatum

Los desarrolladores de PHP han decidido romper con el pasado y dejar de arrastrar estas obsoletas e inseguras caracteristicas, y a partir de PHP6 se eliminaran algunas cosas:

-register_globals: a partir de PHP6 sera off y no se podra cambiar.
-include(): en PHP5 se puede modificar la configuracion para permitir incluir URLs, con el consiguiente riesgo de seguridad, en PHP6 no podra cambiarse.
y mas opciones

Teniendo en cuenta que son caracteristicas declaradas obsoletas hace años, creo que avisan con antelacion suficiente para modificar los scripts, que no os pille el toro ;-)

el que avisa no es traidor...

Actualizacion 27/8/09: Hace un rato un cliente con un oscommerce descargado e instalado el año pasado acaba de descubrir que no le funcionaba tras cambiar a PHP5, el header.php era de 2003 y usaba HTTP_SERVER_VARS, que fue 'deprecated' en PHP 4.1.0, (10 de Diciembre de 2001 !). Tambien con scripts de otros programadores estais expuestos a este problema.

Sobre este archivo

Esta página es un archivo de las entradas de Agosto 2009, ordenadas de nuevas a antiguas.

Junio 2009 es el archivo anterior.

Noviembre 2009 es el siguiente archivo.

Encontrará los contenidos recientes en la página principal. Consulte los archivos para ver todos los contenidos.

OpenID aceptado aquí Más información sobre OpenID
Powered by Movable Type 5.2