SQL Berparameter: Pertahanan Penting Terhadap Suntikan SQL
Keselamatan pangkalan data adalah terpenting, terutamanya apabila berurusan dengan input luaran daripada aplikasi web atau desktop. Pernyataan SQL berparameter ialah asas interaksi pangkalan data yang mantap, dengan berkesan menghalang serangan suntikan SQL.
Pertimbangkan pertanyaan SQL yang terdedah:
<code class="language-sql">SELECT empSalary FROM employee WHERE salary = txtSalary.Text</code>
Pengguna berniat jahat boleh memasukkan 0 OR 1=1
, mendapatkan semula semua gaji. Lebih berbahaya lagi, input seperti 0; DROP TABLE employee
boleh menyebabkan kehilangan data.
Pertanyaan berparameter menawarkan penyelesaian. Mereka menggunakan ruang letak untuk data yang dibekalkan pengguna, mengasingkan input daripada arahan SQL itu sendiri.
Begini cara ia berfungsi dalam C#:
<code class="language-csharp">string sql = "SELECT empSalary FROM employee WHERE salary = @salary"; using (SqlConnection connection = new SqlConnection(/* connection info */)) using (SqlCommand command = new SqlCommand(sql, connection)) { SqlParameter salaryParam = new SqlParameter("salary", SqlDbType.Money); salaryParam.Value = txtMoney.Text; command.Parameters.Add(salaryParam); SqlDataReader results = command.ExecuteReader(); }</code>
Dan dalam Visual Basic .NET:
<code class="language-vb.net">Dim sql As String = "SELECT empSalary FROM employee WHERE salary = @salary" Using connection As New SqlConnection("connectionString") Using command As New SqlCommand(sql, connection) Dim salaryParam = New SqlParameter("salary", SqlDbType.Money) salaryParam.Value = txtMoney.Text command.Parameters.Add(salaryParam) Dim results = command.ExecuteReader() End Using End Using</code>
Kuncinya ialah pangkalan data menganggap @salary
sebagai nilai data, bukan sebagai kod boleh laku. Ini menghalang kod berniat jahat daripada ditafsirkan sebagai arahan SQL. Menggunakan pertanyaan berparameter mengukuhkan keselamatan pangkalan data dengan ketara, mengurangkan risiko pelanggaran data dan kompromi sistem.
Atas ialah kandungan terperinci Bagaimanakah pernyataan SQL parameterized menghalang serangan suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!