Vulnérabilités d'injection SQL Python SQLite3
Les vulnérabilités d'injection SQL permettent aux attaquants d'exécuter des requêtes SQL malveillantes sur une base de données. Ces vulnérabilités peuvent survenir lorsque les entrées de l'utilisateur sont directement incorporées dans les requêtes SQL sans validation et échappement appropriés.
Vulnérabilité du code
Les extraits de code fournis sont vulnérables à l'injection SQL en raison de l'utilisation de .format pour construire dynamiquement des requêtes SQL. Par exemple, considérons l'instruction suivante :
cursor.execute("insert into user(username, password)" " values('{0}', '{1}')".format(username, password))
Si le nom d'utilisateur ou le mot de passe contiennent des caractères malveillants (par exemple, un guillemet simple), ils peuvent être interprétés comme faisant partie de la requête SQL. Cela pourrait permettre à un attaquant d'exécuter des commandes SQL arbitraires, telles que la suppression de tables ou l'insertion de données malveillantes.
Correction
Pour résoudre cette vulnérabilité, il est nécessaire d'utiliser des paramètres paramétrés. requêtes au lieu de l’interpolation de chaîne. Les requêtes paramétrées empêchent l'injection SQL en utilisant des espaces réservés (?) Pour représenter les entrées de l'utilisateur et en permettant au moteur de base de données de gérer l'échappement de ces valeurs. Par exemple :
cursor.execute("insert into user(username, password) values(?, ?)", (username, password))
En utilisant des requêtes paramétrées, le moteur de base de données garantira que tous les caractères spéciaux de l'entrée sont correctement échappés, empêchant ainsi les attaques par injection SQL. Il est essentiel d'utiliser des requêtes paramétrées chaque fois que la saisie de l'utilisateur est utilisée dans les requêtes SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!