Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Suntikan SQL dalam pertanyaan duckdb pada bingkai data panda

Suntikan SQL dalam pertanyaan duckdb pada bingkai data panda

WBOY
WBOYke hadapan
2024-02-09 23:57:031270semak imbas

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

Kandungan soalan

Dalam projek, saya menggunakan duckdb untuk melaksanakan beberapa pertanyaan pada kerangka data. Untuk salah satu pertanyaan, saya perlu menambah beberapa input pengguna pada pertanyaan. Itulah sebabnya saya ingin tahu sama ada suntikan sql mungkin dalam kes ini. Bolehkah pengguna merosakkan aplikasi atau sistem melalui input? Jika ya, bagaimana saya boleh mengelakkan perkara ini daripada berlaku? Nampaknya duckdb tidak mempunyai pernyataan yang disediakan untuk pertanyaan kerangka data.

Saya telah melihat dalam dokumentasi (https://duckdb.org/docs/api/python/overview.html) tetapi tidak menemui apa-apa yang berguna. Kaedah duckdb.execute(query,parameters) nampaknya hanya berfungsi dengan pangkalan data dengan sambungan sql sebenar, bukan bingkai data.

Terdapat satu lagi soalan mengenai stackoverflow tentang topik ini (sintaks untuk duckdb > python sql dengan parametervariable), tetapi jawapannya hanya berfungsi untuk sambungan sql sebenar, dan versi dengan rentetan f nampaknya tidak selamat kepada saya.

Berikut ialah contoh kod kecil untuk menggambarkan maksud saya:

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

Jadi bagaimana anda akan menyelesaikan masalah ini? Adakah suntikan sql mungkin? Terima kasih atas bantuan anda dan jika anda memerlukan maklumat lanjut sila berasa bebas untuk meminta butiran lanjut!

EDIT: Ralat sintaks dalam kod dibetulkan


Jawapan betul


Nampaknya boleh:

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

   id    student
0   3  student_b

Atas ialah kandungan terperinci Suntikan SQL dalam pertanyaan duckdb pada bingkai data panda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Gabung dari lebar ke panjangArtikel seterusnya:Gabung dari lebar ke panjang