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

2024年 2月 10日 73.0k 0

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

问题内容

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

我已经在文档(https://duckdb.org/docs/api/python/overview.html)中查找过,但找不到任何有用的东西。方法 duckdb.execute(query,parameters) 似乎只适用于具有真正 sql 连接的数据库,而不适用于数据帧。

stackoverflow 上还有一个关于此主题的问题(syntax for duckdb > python sql with parametervariable),但答案仅适用于真正的 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注入是否可能?感谢您的帮助,如果您需要更多信息,请随时询问更多详细信息!

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

正确答案

看来是有可能的:

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

id student
0 3 student_b

登录后复制

以上就是pandas 数据帧上的 duckdb 查询中的 SQL 注入的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论