Dans un projet, j'utilise duckdb pour effectuer quelques requêtes sur une trame de données. Pour l'une des requêtes, je dois ajouter une entrée utilisateur à la requête. C'est pourquoi je veux savoir si l'injection SQL est possible dans ce cas. Un utilisateur peut-il endommager une application ou un système via une entrée ? Si oui, comment puis-je empêcher que cela se produise ? Il semble que duckdb n'ait pas d'instruction préparée pour les requêtes de trames de données.
J'ai regardé dans la documentation (https://duckdb.org/docs/api/python/overview.html) mais je n'ai rien trouvé d'utile. La méthode duckdb.execute(query,parameters)
semble fonctionner uniquement avec des bases de données avec de vraies connexions SQL, pas des dataframes.
Il y a une autre question sur stackoverflow à propos de ce sujet (syntaxe pour duckdb > python sql avec variable de paramètre), mais la réponse ne fonctionne que pour les connexions SQL réelles, et la version avec des chaînes f me semble dangereuse.
Voici un petit exemple de code pour illustrer ce que je veux dire :
import duckdb import pandas as pd df_data = pd.DataFrame({'id': [1, 2, 3, 4], 'student': ['student_a', 'student_a', 'student_b', 'student_c']}) user_input = 3 # fetch some user_input here # How to prevent sql-injection, if its even possible in this case? result = duckdb.query("SELECT * FROM df_data WHERE id={}".format(user_input))
Alors, comment allez-vous résoudre ce problème ? L’injection SQL est-elle possible ? Merci pour votre aide et si vous avez besoin de plus d'informations, n'hésitez pas à demander plus de détails !
EDIT : Correction d'une erreur de syntaxe dans le code
On dirait que c'est possible :
>>> duckdb.execute("""SELECT * FROM df_data WHERE id=?""", (user_input,)).df() id student 0 3 student_b
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!