28-01-2014, 02:31 AM
tl;dr
L'injection va venir de la fiabilité de $_SESSION['login']: si elle n'est pas vérifiée et que sa valeur vient du visiteur, alors ce visiteur peut injecter du code dans la requête et lui faire faire ce qu'il veut.
Crée des fonctions séparées dédiées à la lecture/écriture de la BDD.
Dans toute requête, cast tes variables avant de les insérer dans la requête ("SELECT * FROM `foo` WHERE `id`=".(int)($id))
Injection
Supposons que $_SESSION['login'] soit défini par le serveur de cette façon:
Ou
Alors, en ce cas là, la variable $_SESSION['login'] ne pourra contenir qu'un integer. Elle sera donc fiable, et il n'y aura pas d'injection dans le code présenté.
Maintenant, supposons que le serveur définisse la variable $_SESSION['login'] comme ceci:
L'injection va venir de la fiabilité de $_SESSION['login']: si elle n'est pas vérifiée et que sa valeur vient du visiteur, alors ce visiteur peut injecter du code dans la requête et lui faire faire ce qu'il veut.
Crée des fonctions séparées dédiées à la lecture/écriture de la BDD.
Dans toute requête, cast tes variables avant de les insérer dans la requête ("SELECT * FROM `foo` WHERE `id`=".(int)($id))
Injection
Supposons que $_SESSION['login'] soit défini par le serveur de cette façon:
Code :
$_SESSION['login'] = 25
Code :
$req = mysqli_query(...);
$row = mysqli_fetch_array($req);
$_SESSION['login'] = (int)$row['id'];
Alors, en ce cas là, la variable $_SESSION['login'] ne pourra contenir qu'un integer. Elle sera donc fiable, et il n'y aura pas d'injection dans le code présenté.
Maintenant, supposons que le serveur définisse la variable $_SESSION['login'] comme ceci:
Code PHP :
<?php
$_SESSION['login'] = $_COOKIE['login'];
Ou comme cela
Code PHP :
<?php
$_SESSION['login'] = $_GET['login']; // $_GET ou $_POST