Melindungi Terhadap Suntikan SQL dalam Python
Masalah:
Anda mempunyai skrip Python yang mengemas kini nilai char(80) dalam pangkalan data SQLite. Nilai rentetan diperoleh terus daripada pengguna dan dihantar ke skrip sebagai muatan JSON. Anda sedar bahawa pendekatan ini terdedah kepada serangan suntikan SQL.
Penyelesaian:
Untuk melindungi daripada suntikan SQL, anda boleh menggunakan pertanyaan berparameter dalam operasi kemas kini anda. Pertanyaan berparameter membolehkan anda menghantar nilai kepada pernyataan SQL tanpa memasukkannya terus dalam rentetan pertanyaan. Ini menghalang input berniat jahat daripada mengganggu sintaks SQL.
Pustaka Python sqlite3 menyokong pertanyaan berparameter melalui ? pemegang tempat. Anda boleh menghantar nilai kepada kaedah laksana sebagai satu tuple nilai yang sepadan dengan pemegang tempat dalam pertanyaan.
Kod Disemak:
Berikut ialah versi semakan anda kaedah setLabel yang menggunakan pertanyaan berparameter:
def setLabel( self, userId, refId, label ): self._db.cursor().execute( """ UPDATE items SET label = ? WHERE userId = ? AND refId = ?""", (label, userId, refId) ) self._db.commit()
Dengan menggunakan pertanyaan berparameter, anda memastikan bahawa input pengguna dianggap sebagai nilai dan bukannya sebahagian daripada pernyataan SQL, dengan berkesan menghalang serangan suntikan SQL.
Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Berparameter Dapat Menghalang Suntikan SQL dalam Interaksi SQLite Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!