Bonjour à tous !
Je suis nouveau, et pas très doué alors si je met ce message au mauvais endroit ou dis des bêtises, soyez gentil de pas me taper dessus et je modifierai....
J'ai réalisé un site dont la navigation se passe comme ceci :
index2.php?page=page01
index2.php?page=page02
[...]
et dont le script central est :
Jusque là tout va bien, mon switch empechant que n'importe quelle page soit affichée, et si qqun tapait n'importe quoi, il reviendrait par défaut à la première page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php if ( isset($_GET['page']) ) $page= 'page01'; else $page= $_GET['page']; switch($_GET['page']) { case 'mapremierepage': include ('page01.txt');break; case 'mapremierepage': include ('page02.txt');break; // [...] default: include('mapremierepage.txt');break; } ?>
Etant un brin parano, j'ai rajouté au tout début de mon script un header location de sécurité comme ceci :
Jusque là tout va encore bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php $pages_autorisees = array( 'page01', 'page02', 'page03', ); if (!in_array($_GET[page], $pages_autorisees)) { header("Location: index.php"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> [...]
-Première question : D'un point de vue sécurité mon header location se justifie-t-il ou finalement j'aurai pu tout aussi bien le supprimer ?
Seulement développant mon site j'ai aujourd'hui besoin de rajouter d'autres variables et d'avoir une adresse du style : "site.com/index2.php?page=page01&name=var1"
-Deuxième question D'un point de vue sécurité, est-ce grave si les visiteurs peuvent taper ce qu'ils veulent dans les variables ?
Etant toujours parano, j'ai modifié mon script :
Donc là je vérifie que ma seconde variable name existe, et si elle existe, mais qu'elle est differente de ma liste autorisée, on revient au point de départ. cela fonctionne donc dans ce cadre là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php $pages_autorisees = array( 'page01', 'page02', 'page03', ); $names_autorises = array( 'nom01', 'nom02', ); if (!in_array($_GET[page], $pages_autorisees)) { header("Location: index.php"); } elseif ( (isset($_GET['name'])) && (!in_array($_GET[name], $names_autorises)) ) { header("Location: index.php"); } ?>
"site.com/index.php?page=page01&name=variableinconnue"
Cela retourne bien effectivement automatiquement à la page d'accueil index.php.
Mais le problème c'est que si l'on écrit cela :
"site.com/index.php?page=page01&nameexample=variableinconnue"
ou même "site.com/index.php?page=page01&XXXX"
Le site ne retourne pas a l'index.php mais reste sur page=var tout court.
Voilà ce n'est peut être pas un vrai problème que les gens puissent mettre ce qu'ils souhaitent dans XXXX mais cela me chiffonne, à mon avis vous aurez déjà répondu à ma seconde question.
Une piste que l'on m'a donné est celle-ci :
Il s'agirait donc de mettre un array des variables autorisées à l'intérieur de l'array des pages autorisés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php $pages_autorisees = array ( 'page01' => array ( 'var01', 'var2' ) , 'page02' => '', 'page03' => array ( 'var03', 'var04' ) ) ; if ( // ???? ) { header("Location: index.php"); } ?>
Je l'ai fais et ça fonctionne, on peut même voir les résultats du tableau à l'aide d'un print_r($pages_autorisees);
-Troisième question Que faut-il écrire dans le if comme condition pour qu'il vérifie à la fois ce qu'il y a dans page et dans name et qu'il ramène au départ si les données insérées ne sont pas contenues dans le tableau des données autorisées ?
Si quelqu'un avait la connaissance et la joie de m'aider ce serait vraiment sympa
Si vous trouvez une autre solution, c'est tout bon aussi !
Merci beaucoup d'avance !
Partager