Bonjour,
Dans la série des questions de sécurité inutilo-farfelue, c'est à dire à l'image des pirates, j'en ai une pas piquée des hannetons.
Imaginons que register_global soit à "on" et que $_GET['var'] ou $_POST['var'] fonctionne de la même manière que $var toute seule.
Imaginons qu'à réception de la variable transmise par l'url, vous fassiez, avant l'insertion dans la requête :
Là vous êtes blindé, ok.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $var=intval($_GET['var'])
Mais maintenant, imaginons qu'un petit futé bidouille un formulaire pointant vers votre page web, alors qu'initialement elle n'en comprend pas (ou même si elle en comprend un, après tout).
Et imaginons qu'il insère dans un input de ce formulaire, dont la méthode est POST, le value suivant :
Là votre page va réceptionner une variable $_GET['var'] + une variable $_POST['var'].
Code : Sélectionner tout - Visualiser dans une fenêtre à part <input name="var" value="la requête qui tue pour tout griller">
Donc même si vous faîtes $var=intval($_GET['var']); qu'est ce qui garantie, puisque register_global est à on, que ça ne va pas finalement être la $_POST['var'] contenant la requête d'attaque qui va être insérée ?
Bien sur la parade, si parade est nécessaire, est de faire :
Là dans tous les cas on est blindé, je crois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(isset($_GET['var'])) {$var=intval($_GET['var']);} if(isset($_POST['var'])) {$var=intval($_POST['var']);}
Mais est-ce vraiment utile de faire cela, telle est la question
Partager