Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi l'utilisation d'une instruction préparée mysql est-elle plus sécurisée que l'utilisation des fonctions d'échappement courantes ?

Un point important qui, à mon avis, manque aux gens ici est qu'avec une base de données qui prend en charge les requêtes paramétrées, il n'y a pas de "fuite" à craindre. Le moteur de base de données ne combine pas les variables liées dans l'instruction SQL, puis analyse le tout ; Les variables liées sont conservées séparément et ne sont jamais analysées comme une instruction SQL générique.

C'est de là que viennent la sécurité et la rapidité. Le moteur de base de données sait que l'espace réservé contient uniquement des données, il n'est donc jamais analysé comme une instruction SQL complète. L'accélération survient lorsque vous préparez une instruction une fois, puis que vous l'exécutez plusieurs fois ; l'exemple canonique étant l'insertion de plusieurs enregistrements dans la même table. Dans ce cas, le moteur de base de données n'a besoin d'analyser, d'optimiser, etc. qu'une seule fois.

Maintenant, un piège concerne les bibliothèques d'abstraction de base de données. Ils le simulent parfois en insérant simplement les variables liées dans l'instruction SQL avec l'échappement approprié. Pourtant, c'est mieux que de le faire soi-même.