Maison >développement back-end >Tutoriel Python >Pouvez-vous utiliser des noms de tables variables dans SQLite sans constructeurs de chaînes ?

Pouvez-vous utiliser des noms de tables variables dans SQLite sans constructeurs de chaînes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-08 18:15:021036parcourir

Can You Use Variable Table Names in SQLite Without String Constructors?

Noms de tables variables dans SQLite sans constructeurs de chaînes

Dans SQLite, les noms de tables variables peuvent-ils être utilisés sans recourir à des constructeurs de chaînes vulnérables ?

Contexte

Envisagez un projet cataloguant des données de simulation dans une base de données SQLite. Pour améliorer l'efficacité et la flexibilité, des tableaux sont souhaités pour chaque étoile afin d'éviter d'interroger une grande table pour un petit sous-ensemble de données. Cependant, l'utilisation de constructeurs de chaînes pour les noms de tables est déconseillée en raison des risques d'injection SQL.

Question

Est-il possible d'utiliser une variable comme nom de table sans utiliser de constructeurs de chaînes , proche à :

cursor.execute("CREATE TABLE (?) (etc etc)", self.name)

Réponse

Malheureusement, SQLite n'autorise pas la substitution de paramètres pour les noms de table.

Atténuation des injections SQL

Pour résoudre les problèmes d'injection SQL, envisagez d'implémenter une fonction pour nettoyer les noms de table avant use :

def sanitize_table_name(table_name):
    return ''.join(char for char in table_name if char.isalnum())

Cette fonction nettoie les noms de table en supprimant les caractères spéciaux, tels que les ponctuations et les espaces, ce qui donne lieu à des chaînes alphanumériques.

Exemple d'utilisation

Pour utiliser le nom de table nettoyé :

sanitized_name = sanitize_table_name(self.name)
cursor.execute(f"CREATE TABLE StarFrame{sanitized_name} (etc etc)")

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