2008-09-19 16 views
9

Tome este código:?PHP: Get-datos automáticamente de ser declarado como variables

<?php 
if (isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
} 

if ($action) { 
    echo $action; 
} 
else { 
    echo 'No variable'; 
} 
?> 

y luego acceder al archivo con la acción = prueba ¿Hay alguna manera de prevenir la acción $ de forma automática ser declarado por el GET ? Aparte de agregar

&& !isset($_GET['action']) 

¿Por qué querría que se declarara la variable para mí?

Respuesta

27

Compruebe su php.ini para la configuración register_globals. Probablemente esté encendido, lo quieres apagado.

¿Por qué querría que se declare la variable para mí?

You don't. Es un riesgo de seguridad horrible. Hace que las variables Environment, GET, POST, Cookie y Server sean globales (PHP manual). Estos son un puñado de reserved variables en PHP.

+0

Gracias por la respuesta, es realmente lo que he estado buscando. Pero, ¿es mi ejemplo lo único que afecta a register_globals? – Eikern

+0

Publiqué un poco más en la respuesta anterior: afecta al entorno, obtener, publicar, cookie y servidor. – owenmarshall

4

Parece register_globals en su php.ini es el culpable. Debes apagar esto. También es un gran riesgo de seguridad tenerlo activado.

Si está en alojamiento compartido y no puede modificar php.ini, puede usar ini_set() para desactivar register_globals.

1

usted puede probar, si todas las variables se declaran correctamente girando el registro a nivel de PHP en PHP.INI a

error_reporting = E_ALL 

que el fragmento del código debe generar un AVISO.

1

En algún momento de la historia de php tomaron la controvertida decisión de desactivar register_globals por defecto, ya que constituía un gran peligro para la seguridad. Da a cualquiera el potencial para inyectar variables en tu código, ¡crea consecuencias impensables! Esta "característica" incluso se elimina en php6

Si observa que está en contacto con su administrador para desactivarlo.

2

si no tiene acceso al php.ini , un ini_set('register_globals', false) en el script php no funciona (variables ya se declaran) Un .htacces s con:

php_flag register_globals Off 

a veces puede ayudar.

Cuestiones relacionadas