Procédures Stockées et SQL Injection

Procédures Stockées et SQL Injection - SQL/NoSQL - Programmation

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  :heink: . 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 ?  :??:

Reply

Marsh Posté le 02-10-2007 à 15:24:41   

Reply

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)

Reply

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 ?
 

Reply

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


Message édité par MagicBuzz le 02-10-2007 à 15:54:57
Reply

Marsh Posté le 02-10-2007 à 15:55:42    

Donc les proc. Stockées ne protègent pas de l'SQL injection !


Message édité par did-54 le 02-10-2007 à 15:55:53
Reply

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)

Reply

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/

Reply

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 :o
 
d'où l'importance d'utiliser la même langue partout quand on parle d'un truc :o
 
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 :o

Reply

Marsh Posté le 02-10-2007 à 16:15:28    

MagicBuzz a écrit :

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.
 


parceque si je fous du SQL dans login il ne sera pas interpreté lors de la requete, c'est ca ?

Reply

Marsh Posté le 02-10-2007 à 16:15:57    

Reply

Marsh Posté le 02-10-2007 à 16:15:57   

Reply

Marsh Posté le 02-10-2007 à 16:22:27    


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é  :sweat:

Reply

Marsh Posté le 02-10-2007 à 16:25:18    

:heink:
 
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 :spamafote:

Reply

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 :spamafote:

Reply

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)

Reply

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.

Reply

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 :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed