Maison > base de données > tutoriel mysql > Comment les requêtes paramétrées peuvent-elles empêcher l'injection SQL dans SQLite3 de Python ?

Comment les requêtes paramétrées peuvent-elles empêcher l'injection SQL dans SQLite3 de Python ?

DDD
Libérer: 2024-12-24 04:46:18
original
269 Les gens l'ont consulté

How Can Parameterized Queries Prevent SQL Injection in Python's SQLite3?

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))
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal