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
Barbara Streisandasal
2025-01-09 21:32:45242semak imbas

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>

boleh ditulis semula sebagai:

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

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>

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>

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>

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!

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