Maison >développement back-end >Tutoriel Python >Comment créer en toute sécurité des tables avec des noms dynamiques dans SQLite ?

Comment créer en toute sécurité des tables avec des noms dynamiques dans SQLite ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 02:54:02327parcourir

How to Safely Create Tables with Dynamic Names in 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!

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