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

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

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 00:17:40561parcourir

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

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!

Déclaration:
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