2009-12-22 4 views
2

Je me demande si ces instructions préparées de PDO augmentent vraiment la sécurité, ou si elles ne sont qu'un "bon marché" de remplacement de texte dans la requête. Le point de déclarations préparées est en fait, que tout ce qui est insérée comme paramètre, ne sera pas analysée par le SGBD dans le cadre des instructions lui-même, donc un paramètre commeLes instructions préparées dans PDO augmentent-elles réellement la sécurité?

"'; DROP TABLE foobar;" 

n'a aucun effet et ne rompt pas la requête. Est-ce que quelqu'un le sait en détail? J'ai pensé à utiliser PDO avec des instructions préparées pour prévenir l'injection SQL. Il s'avère qu'ils sont difficiles à utiliser (et ne fonctionnent même pas, au moins sur ma machine locale), donc je veux le savoir avant de perdre beaucoup plus de temps avec PDO ;-)

+2

http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html –

+0

Voter pour fermer comme Google a montré la question SO précédente qui a répondu à celle-ci. – si618

+0

votre exemple d'exploit d'ajouter une autre instruction à la fin après qu'un point-virgule soit appelé "query stacking" - L'empilement de requêtes ne fonctionne que sur certains SGBD lors de l'utilisation de certains modules de langue et n'est pas universel. Ce qui est universel, c'est l'ajout de nouveaux bits de sql à la requête existante via des mots-clés SQL tels que AND, OR, UNION, ORDER BY, etc. – Cheekysoft

Répondre

11

La création d'une instruction préparée envoie la requête avec des caractères génériques au serveur pour l'analyse et renvoie un jeton pour appeler cette instruction.

Un appel consiste simplement à envoyer les données liées à chaque paramètre. Cela signifie qu'il n'y aura pas d'analyse des données (car elles ne font pas partie d'une chaîne de requête) et que la structure de la requête est fixe lorsque l'instruction préparée est analysée et ne peut pas être modifiée par injection. Donc, oui, un énoncé préparé augmente définitivement la sécurité. Cela signifie également que vous n'avez pas à supporter le surdébit d'analyse si vous réutilisez une instruction préparée pour plusieurs requêtes.

+0

mettre simplement, les déclarations préparées ou tout type de "Statements paramétrés" assurer que les données de l'utilisateur sont traitées comme des données seulement et jamais comme code. – Cheekysoft

3

Oui, ils augmentent Sécurité. PDO ou MySQLi augmente également la vitesse par rapport aux méthodes MYSQL normales en PHP parce que les données sont transmises sous une forme plus compacte.

Questions connexes