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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sécurité contre les injections SQL? Quelle est la solution?

par Hubert Roksor » 03 sept. 2006, 15:00

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.

par momox » 03 sept. 2006, 14:17

Oups, j'avais oublié cette fonction :)
Mais bon, est ce que ceci est l'ultime parade?
@+

par Hubert Roksor » 03 sept. 2006, 13:59

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.

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

par momox » 03 sept. 2006, 13:10

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 ;)