Procédures Stockées et SQL Injection - SQL/NoSQL - Programmation
Marsh Posté le 02-10-2007 à 15:50:12
Les PS ne réduisent pas les risques de SQL Injection. Ou du moins, seulement en partie (ce qui se trouve dans la procédure est effectivement blindé), mais pas ce qui se trouve autour.
Il faut que tu passes par une requête paramétrée pour être correctement protégé contre le SQL Injection (et ceci ne nécessite pas forcément l'utilisation de PS)
Marsh Posté le 02-10-2007 à 15:52:36
MagicBuzz a écrit : ce qui se trouve dans la procédure est effectivement blindé, mais pas ce qui se trouve autour. |
C'est à dire ?
Marsh Posté le 02-10-2007 à 15:54:19
ben regarde de la doc sur le sql injection pour voir comment ça marche. tu verras que faire un "exec plop($a)" ne blinde rien du tout si par exemple $a contient :
'a');drop table commandes;--
Marsh Posté le 02-10-2007 à 15:55:42
Donc les proc. Stockées ne protègent pas de l'SQL injection !
Marsh Posté le 02-10-2007 à 16:01:01
si
car si "plop(:login as varchar)" contient la requête
select count(*) from users where login = :login
=> quelque soit le paramètre que tu passes, tu ne pourras pas baiser cette requête.
par contre rien n'empêche de faire l'injection dans la foulée de l'appel de la procédure. si ton site est bien écrit, tu ne peux pas avoir un comportement frauduleux, mais tu ne protèges pas ta base des attaques.
regarde de la doc, c'est trop long à expliquer.
en tout cas, les PS à elles-seules ne protègent pas complètement contre le sql injection. seules les requêtes paramétrées offrent une protection complète (et offrent des performances accrues, tout comme les ps)
Marsh Posté le 02-10-2007 à 16:03:17
tu confonds les procedeure stockées et les prepared statement
http://maximilian.developpez.com/m [...] tatements/
Marsh Posté le 02-10-2007 à 16:08:36
quand on parle de requête paramétrée, y'a plus de confusion.
effectivement, entre ps (abréviation française de "procédure stockée" ) et "ps" (abréviation anglophone de "prepared statement" ) y'a de quoi confusionner
d'où l'importance d'utiliser la même langue partout quand on parle d'un truc
si on parle de procédures stockées, alors on parle de requête paramétrée, et si on parle de prepared statement, alors on parle de stored procedure, et y'a plus de confusion possible
Marsh Posté le 02-10-2007 à 16:15:28
MagicBuzz a écrit : si |
parceque si je fous du SQL dans login il ne sera pas interpreté lors de la requete, c'est ca ?
Marsh Posté le 02-10-2007 à 16:22:27
MagicBuzz a écrit : voilà |
Ok je vois, mais alors je saisis pas trop la différence entre stored procedure et prepared statement dans la manière ou le code est executé
Marsh Posté le 02-10-2007 à 16:25:18
ben y'en a un, c'est une procédure stockée que t'appelle depuis ta requête qui n'est pas paramétrée (donc qui accepte le sql injection), et dans l'autre cas c'est une requête paramétrée (donc qui n'accepte pas le sql injection) qui ne fait pas forcément appel à une procédure stockée
Marsh Posté le 02-10-2007 à 16:31:30
ohh, allright.
Les dénominations avaient eu raison de moi, mais c'est plus clair maintenant, merci
En réalité ce que j'appelais procédure stockée était une requête paramétrée, donc forcément
Marsh Posté le 02-10-2007 à 16:38:44
en fait, le terme anglais "prepared statement" porte vraiment à confusion, parcequ'une procédure stockée, une fonction, un trigger ou une vue sont aussi des prepared statement.
alors que "requête paramétrée", c'est sans appel : il s'agit d'une requête à laquelle tu passes des paramètres (plutôt que de les noyer dans le texte de la requête)
Marsh Posté le 02-10-2007 à 19:09:43
mmmm ceci dit en java un PreparedStatement est bien une requete compilée a laquelle on peut donner des valeurs aux paramètres.
Marsh Posté le 02-10-2007 à 19:52:46
J'ai pas dis que c'était pas le bon terme, j'ai dit que le terme portait à confusion
Marsh Posté le 02-10-2007 à 15:24:41
Hello !
J'ai entendu dire que l'utilisation de procédures stockées réduisait les risques d'SQL Injection.
Je n'arrive pas vraiment à me représenter pourquoi . Dans tous les cas, mes paramètres (i.e entrées utilisateur) sont envoyés à ma base et utilisés par celle-ci dans une requête...
Ou alors c'est au niveau de la procédure que ca se joue ?