Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pertanyaan Berparameter Dapat Menghalang Suntikan SQL dalam SQLite3 Python?
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!