Maison >développement back-end >Tutoriel Python >Comment créer en toute sécurité des tables avec des noms dynamiques dans SQLite ?
Nom de table variable dans SQLite
Dans SQLite, vous pouvez rencontrer une situation où vous devez créer dynamiquement une table avec un nom stocké dans une variable. Bien qu'il soit courant d'utiliser des constructeurs de chaînes à cette fin, des problèmes de sécurité surviennent en raison du potentiel d'attaques par injection SQL.
Malheureusement, SQLite n'autorise pas la substitution de paramètres pour les noms de table. Cependant, les meilleures pratiques imposent l'utilisation d'une substitution de paramètre pour se protéger contre les attaques par injection.
Solution alternative : nettoyer la variable
Étant donné que les noms de table ne peuvent pas être paramétrés directement, un Une solution viable consiste à nettoyer la variable contenant le nom de la table avant de la transmettre à l'instruction CREATE TABLE.
Vous pouvez créer une fonction qui nettoie la variable en supprimant tous les caractères sauf les caractères alphanumériques. Par exemple, la fonction Python suivante supprime la ponctuation, les espaces et autres caractères non alphanumériques :
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() ) scrub('); drop tables --') # returns 'droptables'
À l'aide de cette fonction, vous pouvez créer la table avec un nom de table variable, en garantissant que les caractères malveillants sont supprimés. , empêchant les attaques par injection :
table_name = 'StarFrame' + self.name cursor.execute('CREATE TABLE {} (etc etc)'.format(scrub(table_name)))
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!