Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Choix du passage des parametres dans les URL

3 réponses
Avatar
geo
Hello ,

je dois faire une grande mise a jour d'un de mes sites web.
Jusqu'a maintenant j'ai toujours passe les parametres par des urls de type :
<a href="index.php3?page=home>Home</a>

et je recupere le tout avec $page.

Il semble que depuis la version 1.7 de EasyPHP, il ne permette pas les
variables globales par defaut. Donc je fais un test avec une url :

<a href="index.php3?page=home>Home</a>

et je recupere ma variable par:
$page=$_GET['page']

OK, mais il y a vraiment une bonne raison de devoir tout passer par
$_GET , parceque si je modifie la variable page=... dans la barre
d'adresse du navigateur, je peux modifier la page affichee.

Ou est le cote securite dans cette nouvelle de facon de faire ?

Si je dois refaire ce site, autant le faire tout de suite juste.

Amicalement


Géo

3 réponses

Avatar
Ronnie Garcia

Jusqu'a maintenant j'ai toujours passe les parametres par des urls de
type :
<a href="index.php3?page=home>Home</a>

et je recupere le tout avec $page.

Il semble que depuis la version 1.7 de EasyPHP, il ne permette pas les
variables globales par defaut. Donc je fais un test avec une url :

<a href="index.php3?page=home>Home</a>

et je recupere ma variable par:
$page=$_GET['page']

OK, mais il y a vraiment une bonne raison de devoir tout passer par
$_GET , parceque si je modifie la variable page=... dans la barre
d'adresse du navigateur, je peux modifier la page affichee.

Ou est le cote securite dans cette nouvelle de facon de faire ?


Il y a deux choses différentes a cerner :

- les variables que tu recuperes d'une entrée utilisateur (au sens
général), comme une variable d'url,

- les autres variables de ton script, qui ne servent qu'a l'intérieur
du script.

Lorsque register_global est activé, ces *deux* types de variables
pourraient être initialisées par une personne mal intentionnée en la
passant dans l'url (par exemple). Tu peux vite arriver a des problèmes
de sécurité que je ne détaillerais pas, ca a déjà été fait dans ce NG.

En revanche, et tu as bien raison de le signaler, ca ne t'empêche
*surtout pas* d'avoir à faire des tests sur tes entrées utilisateur.

Tu *dois* (dans tous les cas) vérifier que la valeur entrée correspond à
ce que tu attends. register_global activé ou non.

Hormis le coté sécurité, programmer avec les variables super-globales
($_GET, $_POST, etc) te garanti une meilleure portabilité de ton
logiciel car il fonctionnera sur tous les serveurs, que register_global
soit activé ou non.

--
Ronnie Garcia <ronnie at mk2 dot net>

Avatar
Frederic BISSON
Hello !

Ou est le cote securite dans cette nouvelle de facon de faire ?
D'une part, tu indiques précisément d'où viens ta variable $page. C'est

pratique pour la maintenance des programmes et par le fait qu'un
utilisateur malintentionné ne peut pas utiliser d'autre moyen que la
méthode $_GET pour donner une valeur à $page (implicite vs explicite).

Ensuite, ta manière de sélectionner une page est dangereuse.

Si, dans ton code, tu écris quelque chose comme :
include $page.'.php';

Le même utilisateur intentionné peut s'amuser à donner à $page la
valeur suivante :
http://site.dangereux.com/code_malintentionne

et ainsi opérer comme il veut dans ton code et des données.

En général, plus le déroulement de ton code est explicite et
déterministe, plus le nombre de failles potentielles diminue.

@+

Frédéric BISSON

Avatar
Olivier Miakinen

D'une part, tu indiques précisément d'où viens ta variable $page.
C'est pratique [...] par le fait qu'un utilisateur malintentionné ne
peut pas utiliser d'autre moyen que la méthode $_GET pour donner une
valeur à $page (implicite vs explicite).


Voir <news: ou encore
<http://www.google.fr/groups?selmAA1C3C1.22FF0946%40wanadoo.fr>.

Dans le point 2.a, remplacer « POST » par « GET », et conserver la
conclusion : « C'est le contenu de la donnée qu'il faut vérifier, pas
son mode de transmission (© John Gallet) ».

Je suis d'accord avec tout le reste de ta réponse, que je ne cite pas.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.