Rumah >pangkalan data >tutorial mysql >Bagaimanakah pernyataan SQL parameterized menghalang serangan suntikan SQL?

Bagaimanakah pernyataan SQL parameterized menghalang serangan suntikan SQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-25 13:56:10201semak imbas

How Can Parameterized SQL Statements Prevent SQL Injection Attacks?

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!

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