La importancia de definir el alcance de las variables

Decir que la única ventaja que nos encontramos al definir todas las variables del sitio como globales es la comodidad que implica su uso. Por un lado, a la larga nos ahorramos el escribir un montón de palabras; por otro, nos es suficiente con conocer el nombre de la variable sin tener que preocuparnos de si ésta ha sido enviada desde un formulario (POST), desde un enlace (GET) o ha sido definida por el desarrollador del sitio web, en cuyo caso podrían estar definidas como variables de sesión, venir de una cookie …

Tradicionalmente PHP venia preconfigurado en el archivo de configuración de php (php.ini), con el valor de la directiva register_globals en “on”, pero 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.

La forma de gestionar los valores que serán introducidos en el script de forma externa, obliga a chequear su origen ya que pasan a formar parte de los arrays que las definen.

$_GET[‘variable’] – Variables proporcionadas via HTTP GET.
$_POST[‘variable’] – Variables proporcionadas via HTTP POST.
$_COOKIE[‘variable’] – Variables proporcionadas via HTTP cookies.
$_REQUEST[‘variable’] – Variables proporcionadas via GET, POST, o COOKIE.
$_GLOBALS[‘variable’] – Array con todas las variables de alcance global.
$_SERVER[‘variable’] – Variables via servidor o relacionadas con el entorno de ejecución.
$_FILES[‘variable’] – Variables via upload archivos
$_ENV[‘variable’] – Variables del entorno
$_SESSION[‘variable’] – Variables registradas en una sesión

Con este ejemplo, php.net nos muestra 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.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: