Rumah > pangkalan data > tutorial mysql > Bagaimanakah Pertanyaan Berparameter dalam SQL Menghalang Serangan Suntikan SQL?

Bagaimanakah Pertanyaan Berparameter dalam SQL Menghalang Serangan Suntikan SQL?

Barbara Streisand
Lepaskan: 2025-01-09 21:32:45
asal
200 orang telah melayarinya

How Do Parameterized Queries in SQL Prevent SQL Injection Attacks?

Pertanyaan berparameter SQL dengan tanda soal

Apabila merujuk dokumentasi SQL, anda mungkin menghadapi tanda tanya (?) dalam pertanyaan. Pemegang tempat ini mewakili pertanyaan berparameter dan digunakan secara meluas untuk melaksanakan SQL dinamik dalam atur cara.

Pertanyaan berparameter mempunyai banyak kelebihan. Mereka memudahkan kod dengan menyahganding nilai parameter daripada pertanyaan itu sendiri, menjadikannya lebih cekap dan fleksibel. Selain itu, mereka meningkatkan keselamatan dengan menghalang serangan suntikan SQL.

Sebagai contoh, dalam contoh pseudokod:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()</code>
Salin selepas log masuk

boleh ditulis semula sebagai:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()</code>
Salin selepas log masuk

Teknik ini memastikan pelepasan rentetan yang betul, menghapuskan risiko suntikan SQL. Pertimbangkan senario berikut:

<code>string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()</code>
Salin selepas log masuk

Jika pengguna memasukkan rentetan Robert'); pelajar DROP TABLE --, serangan suntikan SQL mungkin berlaku. Walau bagaimanapun, menggunakan pertanyaan berparameter:

<code>s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()</code>
Salin selepas log masuk

Fungsi perpustakaan akan membersihkan input untuk mengelakkan pelaksanaan kod berniat jahat.

Sebagai alternatif, Microsoft SQL Server menggunakan parameter bernama, yang meningkatkan kebolehbacaan dan kejelasan:

<code>cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()</code>
Salin selepas log masuk

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan