Page 1 sur 1

Sécurité contre les injections SQL? Quelle est la solution?

Posté : 03 sept. 2006, 13:10
par momox
Bonjour a tous,
j'ai consulté recemment un très bon article sur les injections SQL dans le magazine PhpSolution parlant des injections SQL.
Quelle est donc la vraie solution pour contre les injections étant donné que les antislashs ne sont pas la solution qui résout tout?
Doit on créer une REGEX qui va supprimer les fonctions mysql qui transiteraient via les URL ?
Quand on lit ce genre d'articles, on se dit qu'on est vraiment très vulnérable face a ces attaques.
Donc quelle est la solution miracle pour les contrer?
@+ et merci d'avance ;)

Posté : 03 sept. 2006, 13:59
par Hubert Roksor
La solution est plutôt simple, il suffit pour chaque variable utilisée dans une requête de la faire passer par mysql_real_escape_string() ou encore intval() ou floatval() selon son type. En clair, il faut systématiquement valider les données utilisateur. Exemple, un moteur de recherche pour trouver les utilisateurs d'un site:
//
$sql = "SELECT *
          FROM utilisateurs
         WHERE nom LIKE '" . mysql_real_escape_string($_POST['nom'], $db) . "%'
           AND age >= " . intval($_POST['age']);
À la place d'intval(), tu pourras peut-être préférer une solution basée sur une expression rationnelle afin de présenter un message d'erreur à l'utilisateur s'il entre une valeur incorrecte.

Posté : 03 sept. 2006, 14:17
par momox
Oups, j'avais oublié cette fonction :)
Mais bon, est ce que ceci est l'ultime parade?
@+

Posté : 03 sept. 2006, 15:00
par Hubert Roksor
Si tu fais passer absolument toutes les variables par mysql_real_escape_string(), oui. D'un autre côté, il y a généralement d'autres façons un peu plus adaptée de procéder comme je le disais plus haut il vaut mieux vérifier qu'un nombre est bien un nombre, ou même utiliser les deux pour couvrir ses arrières (on peut se tromper dans l'expression rationnelle par exemple). Sinon, oui, mysql_real_escape_string() est la solution ultime.