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!