Heim >Datenbank >MySQL-Tutorial >Wie können parametrisierte SQL-Anweisungen SQL-Injection-Angriffe verhindern?

Wie können parametrisierte SQL-Anweisungen SQL-Injection-Angriffe verhindern?

Linda Hamilton
Linda HamiltonOriginal
2025-01-25 13:56:10303Durchsuche

How Can Parameterized SQL Statements Prevent SQL Injection Attacks?

Parametriertes SQL: Eine entscheidende Verteidigung gegen SQL-Injection

Datenbanksicherheit ist von größter Bedeutung, insbesondere beim Umgang mit externen Eingaben aus Web- oder Desktop-Anwendungen. Parametrisierte SQL-Anweisungen sind ein Eckpfeiler einer robusten Datenbankinteraktion und verhindern effektiv SQL-Injection-Angriffe.

Stellen Sie sich eine anfällige SQL-Abfrage vor:

<code class="language-sql">SELECT empSalary FROM employee WHERE salary = txtSalary.Text</code>

Ein böswilliger Benutzer könnte 0 OR 1=1 eingeben und so alle Gehälter abrufen. Noch gefährlicher ist, dass Eingaben wie 0; DROP TABLE employee zu Datenverlust führen können.

Parametrisierte Abfragen bieten eine Lösung. Sie verwenden Platzhalter für vom Benutzer bereitgestellte Daten und isolieren die Eingabe vom SQL-Befehl selbst.

So funktioniert es in 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>

Und in 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>

Der Schlüssel liegt darin, dass die Datenbank @salary als Datenwert und nicht als ausführbaren Code behandelt. Dadurch wird verhindert, dass Schadcode als SQL-Befehle interpretiert wird. Durch die Verwendung parametrisierter Abfragen wird die Datenbanksicherheit erheblich gestärkt und das Risiko von Datenschutzverletzungen und Systemkompromittierungen verringert.

Das obige ist der detaillierte Inhalt vonWie können parametrisierte SQL-Anweisungen SQL-Injection-Angriffe verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn