Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pertanyaan Berparameter Dapat Menghalang Suntikan SQL dalam SQLite3 Python?

Bagaimanakah Pertanyaan Berparameter Dapat Menghalang Suntikan SQL dalam SQLite3 Python?

DDD
DDDasal
2024-12-24 04:46:18269semak imbas

How Can Parameterized Queries Prevent SQL Injection in Python's SQLite3?

Kerentanan Suntikan SQL Python SQLite3

Kerentanan suntikan SQL membolehkan penyerang melaksanakan pertanyaan SQL yang berniat jahat terhadap pangkalan data. Kerentanan ini boleh timbul apabila input pengguna dimasukkan terus ke dalam pertanyaan SQL tanpa pengesahan yang betul dan melarikan diri.

Kerentanan Kod

Coretan kod yang disediakan terdedah kepada suntikan SQL kerana penggunaan .format untuk membina pertanyaan SQL secara dinamik. Sebagai contoh, pertimbangkan pernyataan berikut:

cursor.execute("insert into user(username, password)"
         "  values('{0}', '{1}')".format(username, password))

Jika nama pengguna atau kata laluan mengandungi aksara berniat jahat (cth., petikan tunggal), ia boleh ditafsirkan sebagai sebahagian daripada pertanyaan SQL. Ini boleh membenarkan penyerang untuk melaksanakan arahan SQL sewenang-wenangnya, seperti menjatuhkan jadual atau memasukkan data berniat jahat.

Betulkan

Untuk menangani kerentanan ini, perlu menggunakan parameterized pertanyaan dan bukannya interpolasi rentetan. Pertanyaan berparameter menghalang suntikan SQL dengan menggunakan ruang letak (?) untuk mewakili input pengguna dan membenarkan enjin pangkalan data mengendalikan pelepasan nilai ini. Contohnya:

cursor.execute("insert into user(username, password) values(?, ?)", (username, password))

Dengan menggunakan pertanyaan berparameter, enjin pangkalan data akan memastikan bahawa sebarang aksara khas dalam input dilupuskan dengan betul, menghalang serangan suntikan SQL. Adalah penting untuk menggunakan pertanyaan berparameter apabila input pengguna digunakan dalam pertanyaan SQL.

Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Berparameter Dapat Menghalang Suntikan SQL dalam SQLite3 Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn