Injection SQL dans la requête duckdb sur la trame de données pandas

WBOY
Libérer: 2024-02-09 23:57:03
avant
1270 Les gens l'ont consulté

pandas 数据帧上的 duckdb 查询中的 SQL 注入

Contenu de la question

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))
Copier après la connexion

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


Bonne réponse


On dirait que c'est possible :

>>> duckdb.execute("""SELECT * FROM df_data WHERE id=?""", (user_input,)).df()

   id    student
0   3  student_b
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!