par
macgawel » 27 mai 2011, 14:29
Définit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie, Server) seront enregistrées comme des variables globales.
Depuis » PHP 4.2.0, la valeur par défaut de cette directive est off.
Lisez le chapitre sur la sécurité concernant l'utilisation de register_globals pour plus d'informations.
Quand on suit le lien :
L'une des évolutions les plus controversées de PHP a été le changement de valeur par défaut de la directive PHP register_globals, qui est passée de On à Off en PHP » 4.2.0. Beaucoup d'applications dépendaient de cette directive, et de nombreux programmeurs ne savaient même pas qu'elle existait, et supposait que c'était le fonctionnement normal de PHP. Cette page explique comment on peut écrire du code peu sécuritaire en utilisant cette directive. Gardez bien en tête que cette directive, par elle-même, n'est pas un trou de sécurité, mais qu'elle facilite leur création.
(...)
Note: Superglobales : disponibilité
Depuis PHP 4.1.0, les tableaux superglobaux tels que $_GET, $_POST et $_SERVER, etc. sont disponibles. Pour plus d'informations, lisez la section superglobals
Et en suivant le lien sur la section superglobals :
Depuis la version PHP 4.2.0, la valeur par défaut de la directive PHP register_globals est off. Ceci est une évolution majeure de PHP. Avoir la directive register_globals à off affecte les variables pré-définies du contexte global. Par exemple, pour lire DOCUMENT_ROOT vous devez utiliser $_SERVER['DOCUMENT_ROOT'] au lieu de $DOCUMENT_ROOT ou bien,
il faut lire $_GET['id'] dans l'URL http://www.example.com/test.php?id=3 au lieu de $id ou encore $_ENV['HOME'] au lieu de $HOME.
Pour être clair :
Ton formulaire envoie les données par un POST.
=> Le contenu des input est stocké dans la variable superglobale $_POST, alors qu'avant ils étaient directement stockés dans une variable du même nom.
=> Ce n'est plus
$Mot qu'il faut utiliser, mais
$_POST['Mot'].
Mon conseil : au début du script, récupère le contenu du POST dans tes variables, et profite-en pour sécuriser un minimum :
<?php
if ( empty ($_POST['Mot'] ) ) { // Si aucun mot clé n'a été saisi
die ("Veuillez entrer un mot clé s'il vous plaît !");
}
else {
$Mot = mysql_real_escape_string($_POST['Mot'];
}
// La suite...
[quote] Définit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie, Server) seront enregistrées comme des variables globales.
Depuis » PHP 4.2.0, la valeur par défaut de cette directive est off.
Lisez le chapitre sur la sécurité concernant l'utilisation de register_globals pour plus d'informations. [/quote]
Quand on suit le lien :
[quote]L'une des évolutions les plus controversées de PHP a été le changement de valeur par défaut de la directive PHP register_globals, qui est passée de On à Off en PHP » 4.2.0. Beaucoup d'applications dépendaient de cette directive, et de nombreux programmeurs ne savaient même pas qu'elle existait, et supposait que c'était le fonctionnement normal de PHP. Cette page explique comment on peut écrire du code peu sécuritaire en utilisant cette directive. Gardez bien en tête que cette directive, par elle-même, n'est pas un trou de sécurité, mais qu'elle facilite leur création.
(...)
Note: Superglobales : disponibilité
Depuis PHP 4.1.0, les tableaux superglobaux tels que $_GET, $_POST et $_SERVER, etc. sont disponibles. Pour plus d'informations, lisez la section superglobals[/quote]
Et en suivant le lien sur la section superglobals :
[quote]Depuis la version PHP 4.2.0, la valeur par défaut de la directive PHP register_globals est off. Ceci est une évolution majeure de PHP. Avoir la directive register_globals à off affecte les variables pré-définies du contexte global. Par exemple, pour lire DOCUMENT_ROOT vous devez utiliser $_SERVER['DOCUMENT_ROOT'] au lieu de $DOCUMENT_ROOT ou bien, [b]il faut lire $_GET['id'] dans l'URL http://www.example.com/test.php?id=3 au lieu de $id [/b]ou encore $_ENV['HOME'] au lieu de $HOME.[/quote]
Pour être clair :
Ton formulaire envoie les données par un POST.
=> Le contenu des input est stocké dans la variable superglobale $_POST, alors qu'avant ils étaient directement stockés dans une variable du même nom.
=> Ce n'est plus [b]$Mot[/b] qu'il faut utiliser, mais [b]$_POST['Mot'][/b].
Mon conseil : au début du script, récupère le contenu du POST dans tes variables, et profite-en pour sécuriser un minimum :
[php]<?php
if ( empty ($_POST['Mot'] ) ) { // Si aucun mot clé n'a été saisi
die ("Veuillez entrer un mot clé s'il vous plaît !");
}
else {
$Mot = mysql_real_escape_string($_POST['Mot'];
}
// La suite...
[/php]