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

问题描述 投票:0回答:1

在一个项目中,我正在使用 duckdb 对数据帧执行一些查询。对于其中一个查询,我需要将一些用户输入添加到查询中。这就是为什么我想知道在这种情况下是否可以进行 SQL 注入。用户是否可以通过输入损害应用程序或系统?如果是这样,我该如何防止这种情况发生?看来duckdb没有用于数据帧查询的PreparedStatement。

我已经在文档中查找过(https://duckdb.org/docs/api/python/overview.html),但找不到任何有用的东西。该方法

duckdb.execute(query, parameters)
似乎仅适用于具有真正 sql 连接的数据库,而不适用于数据帧。

stackoverflow 上还有另一个关于此主题的问题(Syntax for Duckdb > Python SQL with Parameter\Variable),但答案仅适用于真正的 sql 连接,并且带有 f 字符串的版本对我来说似乎不安全。

这是一个小代码示例来展示我的意思:

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))

那么你会如何解决这个问题呢? sql注入是否可能?感谢您的帮助,如果您需要更多信息,请随时询问更多详细信息!

编辑:修复了代码中的语法错误

python pandas security sql-injection duckdb
1个回答
0
投票

我不知道是否可以用

query
进行一些SQL注入。但是,您可以使用可能更安全的方法:

duckdb.df(df_data).select('*').filter(f'id = {user_input}')

# Or simply duckdb.df(df_data).filter(f'id = {user_input}')

输出:

┌───────┬───────────┐
│  id   │  student  │
│ int64 │  varchar  │
├───────┼───────────┤
│     3 │ student_b │
└───────┴───────────┘
© www.soinside.com 2019 - 2024. All rights reserved.