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