Home > Backend Development > Python Tutorial > SQL injection in duckdb query on pandas dataframe

SQL injection in duckdb query on pandas dataframe

WBOY
Release: 2024-02-09 23:57:03
forward
1303 people have browsed it

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

Question content

In a project, I am using duckdb to perform some queries on a dataframe. For one of the queries, I need to add some user input to the query. That's why I want to know if sql injection is possible in this case. Can a user harm an application or system through input? If so, how can I prevent this from happening? It seems duckdb has no preparedstatement for dataframe queries.

I've looked in the documentation (https://duckdb.org/docs/api/python/overview.html) but can't find anything useful. The method duckdb.execute(query,parameters) seems to only work with databases with real sql connections, not dataframes.

There is also a question on stackoverflow on this topic (syntax for duckdb > python sql with parameter\variable), but the answer only works for real sql connections, and the version with f-strings seemed to me Not safe.

Here is a small code example to illustrate what I mean:

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))
Copy after login

So how will you solve this problem? Is sql injection possible? Thanks for your help and if you need more information please feel free to ask for more details!

Edit: Fixed syntax error in code


Correct answer


Looks like it is possible:

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

   id    student
0   3  student_b
Copy after login

The above is the detailed content of SQL injection in duckdb query on pandas dataframe. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template