Las variables -y sus valores- pueden llegar a nuestro script PHP por distintas vias.
El autor del script puede fijar su valor dentro del propio código (variables internas); o puede permitir que sean los usuarios de la página quienes proporcionen el valor.
Las variables que pueden venir dadas desde fuera del script se llaman variables externas: pueden llegar como cadena de carácteres añadida a una url o un enlace (método get); a traves de un formulario html (método get o post), de cookies, via http (include o upload files) o a traves del servidor web que ejecuta el script (variables de entorno).
Si PHP está configurado para registrar las variables externas con alcance global (globals on en la configuracion general PHP), no tenemos forma de distinguirlas de las variables internas, y tanto unas como otras estarán automáticamente disponibles para su uso. Y esto puede ser un problema. Un visitante de la página podría crear cualquier variable, o pasar cualquier valor, y no solamente a aquellas variables pensadas para tomar su valor del usuario, sino a todas las variables. Si no filtramos cuidadosamente la entrada de datos, podemos ver comprometida la seguridad de nuestro sistema.
Considera este ejemplo, con el que php.net ilustró la necesidad de cambio de configuración por defecto de PHP:
<?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.
La directiva register_globalsEn el archivo de configuración de php (php.ini) podemos ordenar a PHP, mediante la directiva register_globals, que registre (o no) como globales las variables EGPCS, es decir, aquellas variables externas que vienen del entorno -Environment-, o via GET, POST, Cookie y Server.
Tradicionalmente PHP venia preconfigurado con este valor "on", pero se recomienda prescindir de esta posibilidad. La configuración sugerida por defecto desde la versión 4.2.0 es la de register_globals off
Con globals en off, PHP no crea variables externas globales, lo que supone eliminar la via de ataque mas habitual, al impedir al atacante que inyecte sus propias variables con alcance global.
Por supuesto, podemos seguir introduciendo valores en el script de forma externa, pero estos valores no son ya accesibles para el script como lo son las variables internas, sino como valores de array, lo que obliga a chequear mínimamente su origen.Configurar las globales off no supone una solución total a los problemas de seguridad. Siempre será necesario chequear y filtrar los datos enviados al script desde fuera, pero supone un gran avance ya que en primer lugar, estamos separando variables internas y externas, y de otro, tenemos clasificadas estas variables externas atendiendo a su origen (get, post, cookie etc).
Usuarios que han visto este tema también han visto...
- Enviar un formulario por correo electrónico
- Crear imágenes GIF desde PHP
- Eliminar espacios en blanco de una cadena con PHP
- Grafica gd de usuarios en PHP
- Captcha: Diferenciando automaticamente humanos de maquinas con PHP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.