Protection contre l'injection SQL en Python
Problème :
Vous disposez d'un script Python qui met à jour une valeur char(80) dans une base de données SQLite. La valeur de chaîne est obtenue directement auprès d'un utilisateur et transmise au script en tant que charge utile JSON. Vous êtes conscient que cette approche est vulnérable aux attaques par injection SQL.
Solution :
Pour vous protéger contre l'injection SQL, vous pouvez utiliser des requêtes paramétrées dans votre opération de mise à jour. Les requêtes paramétrées vous permettent de transmettre des valeurs à une instruction SQL sans les inclure directement dans la chaîne de requête. Cela empêche les entrées malveillantes de perturber la syntaxe SQL.
La bibliothèque Python sqlite3 prend en charge les requêtes paramétrées via le ? espace réservé. Vous pouvez transmettre des valeurs à la méthode d'exécution sous la forme d'un tuple de valeurs correspondant aux espaces réservés dans la requête.
Code révisé :
Voici une version révisée de votre Méthode setLabel qui utilise une requête paramétrée :
def setLabel( self, userId, refId, label ): self._db.cursor().execute( """ UPDATE items SET label = ? WHERE userId = ? AND refId = ?""", (label, userId, refId) ) self._db.commit()
En utilisant une requête paramétrée, vous vous assurez que la saisie de l'utilisateur est traitée comme une valeur plutôt qu'une partie de l'instruction SQL, empêchant efficacement les attaques par injection 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!