PHP:GET-datos se declaran automáticamente como variables
Pregunta
Tome este código:
<?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? Action = test ¿Hay alguna forma de evitar que la acción $ sea declarada automáticamente por el Get?Aparte de, por supuesto, agregar
&& !isset($_GET['action'])
¿Por qué querría que se declarara la variable por mí?
Solución
Verifique su php.ini para ver register_globals
configuración.Probablemente esté encendido, lo quieres quitar.
¿Por qué querría que se declarara la variable por mí?
No lo haces. Es un riesgo de seguridad horrible.Hace que las variables de Entorno, GET, POST, Cookie y Servidor sean globales (Manual de PHP).Estos son un puñado de variables reservadas en PHP.
Otros consejos
Parece register_globals
en tu php.ini es el culpable.Deberías desactivar esto.También es un gran riesgo para la seguridad tenerlo puesto.
Si estás en un hosting compartido y no puedes modificar php.ini, puedes usar ini_set() para desactivar Register_globals.
Desactive Register_globals si entiendo su pregunta.Ver http://us2.php.net/manual/en/language.variables.predefinido.php
si no tienes acceso al php.ini, a ini_set('register_globals', false)
En el script PHP no funcionará (ya se declaran variables) un .htaccess con:
php_flag register_globals Off
a veces puede ayudar.
Puede probar si todas las variables están declaradas correctamente cambiando el nivel de registro de PHP en PHP.INI a
error_reporting = E_ALL
Su fragmento de código ahora debería generar un AVISO.
En algún momento de la historia de php, tomaron la controvertida decisión de desactivar Register_globals de forma predeterminada, ya que representaba un gran peligro para la seguridad.Le brinda a cualquiera la posibilidad de inyectar variables en su código y crear consecuencias impensables.Esta "característica" incluso se elimina en php6
Si nota que está activado, comuníquese con su administrador para desactivarlo.