PHP: les données GET sont automatiquement déclarées en tant que variables
Question
Prenez ce code:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
Puis accédez au fichier avec? action = test Existe-t-il un moyen d'empêcher que $ action soit automatiquement déclarée par l'EEG? Autre que l'ajout bien sûr
&& !isset($_GET['action'])
Pourquoi voudrais-je que la variable soit déclarée pour moi?
La solution
Vérifiez votre php.ini pour le paramètre register_globals
. Il est probablement allumé, vous le voulez.
Pourquoi voudrais-je que la variable soit déclarée pour moi?
Ce n'est pas le cas. C'est un risque de sécurité épouvantable. Il rend globales les variables Environment, GET, POST, Cookie et Server (Manuel PHP) . Voici quelques variables réservées en PHP.
Autres conseils
On dirait que register_globals
dans votre php.ini est le coupable. Tu devrais éteindre ça. C'est également un énorme risque pour la sécurité de l'avoir.
Si vous êtes sur un hébergement partagé et que vous ne pouvez pas modifier le fichier php.ini, vous pouvez utiliser ini_set () pour désactiver register_globals.
Désactivez register_globals si je comprends votre question. Voir http://us2.php.net/manual/fr/language .variables.predefined.php
si vous n'avez pas accès au php.ini , un ini_set('register_globals', false)
dans le script php ne fonctionnera pas (les variables sont déjà déclarées)
Un .htacces avec:
php_flag register_globals Off
peut parfois aider.
Vous pouvez vérifier si toutes les variables sont déclarées correctement en définissant le niveau de journalisation PHP dans PHP.INI sur
.error_reporting = E_ALL
Votre extrait de code devrait maintenant générer un AVIS.
À un moment donné dans l'histoire de php, ils ont pris la décision controversée de désactiver register_globals par défaut car il s'agissait d'un énorme danger pour la sécurité. Cela donne à n'importe qui le potentiel d'injecter des variables dans votre code, ce qui crée des conséquences impensables! Cette & Quot; fonctionnalité & Quot; est même supprimé dans php6
Si vous remarquez qu'il est allumé, contactez votre administrateur pour le désactiver.