Maison >développement back-end >Tutoriel Python >Comment créer des tables dynamiques dans SQLite en toute sécurité ?
Dans la gestion de bases de données, la flexibilité et l'efficacité sont primordiales. Lorsqu'on travaille avec SQLite, la question se pose : peut-on utiliser des noms de tables variables sans recourir à des constructeurs de chaînes, une pratique sensible aux attaques par injection SQL ?
Dans ce cas, le but est de créer une table pour chaque étoile dans une simulation d'étoile. Chaque table doit être nommée en fonction du nom de la star. Dans un premier temps, l'approche consiste à utiliser des constructeurs de chaînes :
cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")
Cependant, ce n'est pas idéal. Pour résoudre le problème, on peut envisager d'utiliser des paramètres :
cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)
Malheureusement, les tableaux ne peuvent pas être la cible d'une substitution de paramètres. Par conséquent, cette approche n’est pas réalisable.
Au lieu de cela, pour assurer la protection contre les attaques par injection, une fonction de désinfection peut être utilisée. Cette fonction filtre les caractères spéciaux et garantit que le nom de la table ne contient que des caractères alphanumériques :
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() ) table_name = scrub(self.name) cursor.execute(f"CREATE TABLE StarFrame{table_name} (etc etc)")
Cette approche permet la création dynamique de tables tout en se protégeant contre les menaces de sécurité. En supprimant les vecteurs d'injection potentiels, il maintient l'intégrité de la base de données et empêche les acteurs malveillants d'exploiter l'application.
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!