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

Bagaimanakah pernyataan SQL parameterized menghalang serangan suntikan SQL?

Linda Hamilton
Lepaskan: 2025-01-25 13:56:10
asal
194 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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