Table des matières
Utiliser des requêtes paramétrées (instructions préparées)
Évitez le bâtiment de requête dynamique avec entrée utilisateur
Utilisez les bibliothèques ORM lorsque cela est possible
Valider et désinfecter les contributions (défense en profondeur)
Gérer attentivement la table ou les colonnes dynamiques
Maison développement back-end Tutoriel Python Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?

Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?

Aug 07, 2025 am 10:30 AM
python injection SQL

L'utilisation de requêtes paramétrées est la méthode de base pour empêcher l'injection SQL dans Python, et il est nécessaire d'éviter l'épissage direct de l'entrée utilisateur. 1. Utilisez toujours les requêtes paramétrées prises en charge par les pilotes de base de données, telles que les mécanismes d'espace réservé dans SQLite3, PSYCOPG2 et MySQL-Connector-Python; 2. Il est interdit de construire des instructions SQL via l'épissage ou le formatage des chaînes (tels que F-string, .format ()); 3. La priorité est donnée à l'utilisation de bibliothèques ORM telles que Sqlalchemy ou Django ORM, qui utilisent les requêtes paramétrées par défaut; 4. Vérification et filtrage des entrées utilisateur comme défenses supplémentaires, y compris le type, la longueur et la vérification de la liste blanche; 5. Lorsque vous traitez des noms de table ou des noms de colonne dynamiques, le mécanisme de liste blanche doit être utilisé pour s'assurer que seuls les identificateurs prédéfinis sont autorisés. Tant que vous insistez toujours sur les requêtes paramétrées et évitez d'intégrer directement l'entrée des utilisateurs dans les chaînes SQL, vous pouvez éliminer efficacement les vulnérabilités d'injection SQL.

Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?

La prévention des vulnérabilités d'injection SQL à Python se résume à un principe de base: ne faites jamais confiance à la saisie des utilisateurs lors de la création de requêtes SQL . Le moyen le plus efficace de protéger votre application consiste à éviter la concaténation ou le formatage des chaînes pour inclure les données utilisateur directement dans les instructions SQL. Voici comment faire les choses correctement.

Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?

Utiliser des requêtes paramétrées (instructions préparées)

La défense la meilleure et la plus fiable est d'utiliser des requêtes paramétrées avec des espaces réservés. Cela garantit que la saisie de l'utilisateur est traitée strictement sous forme de données, et non de code exécutable.

La plupart des bibliothèques de base de données Python prennent en charge les requêtes paramétrées. Par exemple, avec sqlite3 :

Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?
 importer sqlite3

Conn = sqlite3.Connect ("Example.DB")
cursor = conn.cursor ()

# ✅ SAFE: Utilisation de la requête paramétrée
username = input ("Entrez le nom d'utilisateur:")
cursor.execute ("SELECT * FROM Users Where Username =?", (nom d'utilisateur,))

# ❌ Dangereux: ne faites pas ça
# cursor.execute (f "SELECT * FROM Users Where Username = '{username}'")

Avec psycopg2 (PostgreSQL):

 importer psycopg2

cursor.execute ("Sélectionner * parmi les utilisateurs où e-mail =% s", (e-mail,))

Avec MySQL utilisant mysql-connector-python :

Comment pouvez-vous prévenir les vulnérabilités d'injection SQL dans votre code Python?
 cursor.execute ("Sélectionner * parmi les utilisateurs où e-mail =% s", (e-mail,))

Utilisez toujours le paramétrage intégré du pilote de base de données - pas le formatage de chaîne Python comme .format() , F-strings ou % .

Évitez le bâtiment de requête dynamique avec entrée utilisateur

Ne créez jamais de requêtes SQL en concaténant les chaînes qui incluent des données fournies par l'utilisateur.

 # ❌ Vulnérable à l'injection
query = "select * chez les utilisateurs où username = '" nom d'utilisateur "'"
cursor.execute (requête)

Même si vous essayez de désinfecter les entrées vous-même, vous manquerez probablement les cas Edge. Laissez le pilote de base de données le gérer via des paramètres.

Utilisez les bibliothèques ORM lorsque cela est possible

Les mappeurs d'objet-relation (ORMS) comme Sqlalchemy ou Django ORM utilisent automatiquement les requêtes paramétrées sous le capot, ce qui rend beaucoup plus difficile d'introduire l'injection SQL.

Exemple avec Sqlalchemy:

 De Sqlalchemy.Orm Import Sessionmaker
Session = Sessionmaker (bind = moteur)
session = session ()

# ✅ en toute sécurité
user = session.query (user) .filter (user.userName == nom d'utilisateur) .First ()

Exemple avec Django:

 User.objects.filter (username = request.get ['username'])

Ces frameworks abstgent SQL brut et appliquent des pratiques sûres par défaut.

Valider et désinfecter les contributions (défense en profondeur)

Bien que les requêtes paramétrées soient la principale ligne de défense, vous devez toujours valider les types d'entrée, les longueurs, les formats et les valeurs acceptables dans la mesure du possible.

Par exemple:

  • Assurez-vous qu'un ID est numérique.
  • Limiter les longueurs de chaîne.
  • Utilisez des listes d'autoroute pour des choses comme les directions de tri ( ASC / DESC ) ou les noms de table / colonne s'ils doivent être dynamiques.

Mais n'oubliez pas: la validation d'entrée seule ne peut pas arrêter l'injection SQL - c'est un supplément, pas un remplacement du paramétrage.

Gérer attentivement la table ou les colonnes dynamiques

Parfois, vous devez inclure dynamiquement des noms de table ou de colonnes (qui ne peuvent pas être paramétrés). Dans de tels cas:

  • Utilisez une liste d'autorisation d'identifiants autorisés.
  • Ne pas transmettre directement l'entrée de l'utilisateur brut.
 autorisé_columns = {'name', 'e-mail', 'créé_at'}
Si la colonne n'est pas dans ALLERD_Columns:
    augmenter ValueError ("Nom de la colonne non valide")

query = f "SELECT * FROM Users Order par {colonne}"
cursor.execute (requête)

De cette façon, seules des valeurs pré-approuvées sont utilisées.


Fondamentalement, respectez les requêtes paramétrées pour toutes les données variables, utilisez ORMS lorsque vous le pouvez, et jamais intégrée par utilisateur directement dans les chaînes SQL. Ce n'est pas complexe - tout simplement cohérent.

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 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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1543
276
Comment automatiser la saisie de données d'Excel à un formulaire Web avec Python? Comment automatiser la saisie de données d'Excel à un formulaire Web avec Python? Aug 12, 2025 am 02:39 AM

La méthode de remplissage des données Excel dans les formulaires Web à l'aide de Python est: utilisez d'abord des pandas pour lire les données Excel, puis utilisez le sélénium pour contrôler le navigateur pour remplir et soumettre automatiquement le formulaire; Les étapes spécifiques incluent l'installation de bibliothèques Pandas, OpenPyxl et Selenium, en téléchargeant le pilote de navigateur correspondant, en utilisant des pandas pour lire le nom, le courrier électronique, le téléphone et d'autres champs dans le fichier data.xlsx, le lancement du navigateur via le sélénium pour ouvrir la page Web cible, localiser les éléments de formulaire et remplir le traitement de données, en utilisant le formulaire Web pour traiter le contenu dynamique, ajouter le contenu de la charge dynamique, ajouter un traitement exception et traiter toutes les lignes de données dans une boucle.

Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Aug 14, 2025 am 11:15 AM

Table des matières Qu'est-ce que l'analyse des sentiments dans le trading des crypto-monnaies? Pourquoi l'analyse des sentiments est importante dans l'investissement des crypto-monnaies sources clés de données d'émotion a. Plateforme de médias sociaux b. Médias d'information c. Outils pour l'analyse des sentiments et la technologie Utilisé couramment des outils dans l'analyse des sentiments: Techniques adoptées: intégrer l'analyse des sentiments dans les stratégies de trading comment les traders l'utilisent: Exemple de stratégie: supposer le scénario de trading BTC Réglage du scénario: Signal émotionnel: interprétation des commerçants: Décision: Résultats: Limitations et risques de l'analyse des sentiments en utilisant de plus en plus les émotions pour le commerce des crypto-oreilles. Une récente étude en 2025 de Hamid

Comment gérer les grands ensembles de données dans Python qui ne rentrent pas dans la mémoire? Comment gérer les grands ensembles de données dans Python qui ne rentrent pas dans la mémoire? Aug 14, 2025 pm 01:00 PM

Lors du traitement de grands ensembles de données qui dépassent la mémoire dans Python, ils ne peuvent pas être chargés en RAM en même temps. Au lieu de cela, des stratégies telles que le traitement de la chasse, le stockage du disque ou le streaming doivent être adoptées; Les fichiers CSV peuvent être lus en morceaux via les paramètres ChunkSize de Pandas et le bloc traité par bloc. La daste peut être utilisée pour réaliser la parallélisation et la planification des tâches similaires à la syntaxe Pandas pour prendre en charge les opérations de données de mémoire importantes. Écrivez les fonctions du générateur pour lire les fichiers texte ligne par ligne pour réduire l'utilisation de la mémoire. Utilisez le format de stockage en colonne de parquet combiné avec Pyarrow pour lire efficacement des colonnes ou des groupes de lignes spécifiques. Utilisez Memmap de Numpy pour mapper la mémoire de grands tableaux numériques pour accéder aux fragments de données à la demande, ou stocker des données dans des données légères telles que SQLite ou DuckDB.

Comment déboguer votre code python Comment déboguer votre code python Aug 13, 2025 am 12:18 AM

Useprint () instructionSOcheckVariableValuesAndexEcutionflow, ajoutlabelsandtypesforclarity, andRemoveThembeForComting; 2.Ushepylepylebugger (pdb) withreakpoint () topauseeexecution, inspectvariables, andstepthroughcodeinteractive; 3.HandleExceptionsusin;

Comment déboguer le code Python dans le texte sublime? Comment déboguer le code Python dans le texte sublime? Aug 14, 2025 pm 04:51 PM

UsuBrimeText’sBuildSystemTorunpyThonscriptsandcatcherRorSpressingCtrl baftersettingthecorrectBuildSystemorCreatacustomone.2.InsertStrategicprint () StatementScocheckVariableValues, Types, etxExecutionflow, usingLabelSAndrepr () Forclarit

Comment exécuter le code Python dans le texte sublime? Comment exécuter le code Python dans le texte sublime? Aug 16, 2025 am 04:58 AM

Assurez-vous que Python est installé et ajouté au chemin du système, exécutez Python - Version ou Python3 - Version Version via le terminal; 2. Enregistrez le fichier Python en tant qu'extension .py, comme Hello.py; 3. Créez un système de construction personnalisé dans sublimeText, les utilisateurs de Windows utilisent {"CMD": ["Python", "- U", "$ File"]}, les utilisateurs de macOS / Linux utilisent {"CMD": ["Python3

Comment déboguer un script python dans vscode Comment déboguer un script python dans vscode Aug 16, 2025 am 02:53 AM

Pour déboguer Python Scripts, vous devez d'abord installer l'extension Python et configurer l'interprète, puis créer un fichier lancé.json pour définir la configuration de débogage, puis définir un point d'arrêt dans le code et appuyez sur F5 pour démarrer le débogage. Le script sera interrompu au point d'arrêt, permettant de vérifier les variables et l'exécution étape par étape. Enfin, en vérifiant le problème en affichant la sortie de la console, en ajoutant des journaux ou en ajustant les paramètres, etc., pour s'assurer que le processus de débogage est simple et efficace après la correction de l'environnement.

Comment aplatir une liste imbriquée ou une liste de listes dans Python Comment aplatir une liste imbriquée ou une liste de listes dans Python Aug 12, 2025 am 09:49 AM

AplatinganestestListInpyThonConvertsalist avec les publistiquesIntoasingleflatlist et ThebestMethDependSonTherestDepthanddatasize.forone-levelnesting, uselistcomprehensionliny

See all articles