Heim >Datenbank >MySQL-Tutorial >Wie schützen parametrisierte Abfragen vor SQL-Injection?

Wie schützen parametrisierte Abfragen vor SQL-Injection?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 10:54:02613Durchsuche

How Do Parameterized Queries Protect Against SQL Injection?

Verwendung parametrisierter Abfragen für sichere Datenbankinteraktion

SQL-Injection stellt nach wie vor eine erhebliche Sicherheitsbedrohung dar und ermöglicht es Angreifern, böswillige Abfragen mithilfe von Benutzereingaben auszuführen . Um Ihre Website zu schützen, bieten parametrisierte Abfragen eine robuste Lösung. Ihre Integration erfordert jedoch eine ordnungsgemäße Handhabung der Datenbankverbindung.

Betrachten Sie diesen Beispiel-Anmeldeseitencode:

<code class="php">$userName = $_POST["username"];
$userPass = $_POST["password"];

$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";

$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)

$row = mysqli_fetch_array($result);

if(!$row){
    echo "No existing user or wrong password.";
}</code>

Implementieren parametrisierter Abfragen:

Zur Vermeidung SQL-Injection, ersetzen Sie diesen Code durch:

<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");

mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass);

mysqli_stmt_execute($stmt);

$row = mysqli_stmt_fetch($stmt);</code>
  • mysqli_prepare(): Bereitet eine parametrisierte Abfrageanweisung vor.
  • mysqli_stmt_bind_param(): Bindet Eingabewerte an Platzhalter (?).
  • mysqli_stmt_execute(): Führt die vorbereitete Abfrage aus.
  • mysqli_stmt_fetch(): Ruft die ab Ergebniszeile.

Verbindungsbehandlung:

Im Originalcode wird die Verbindung zur Datenbank mit mysqli_connect() hergestellt. Dies muss vor der Ausführung von Abfragen erfolgen. Stellen Sie sicher, dass Sie über einen gültigen $dbc verfügen, bevor Sie fortfahren.

Bewährte Sicherheitspraktiken:

  • Hashen oder verschlüsseln Sie Passwörter, bevor Sie sie in der Datenbank speichern.
  • Benutzereingaben validieren, um böswillige Zeichen zu verhindern.
  • Verwenden Sie vorbereitete Anweisungen konsistent für alle Datenbankinteraktionen mit vom Benutzer bereitgestellten Daten.

Das obige ist der detaillierte Inhalt vonWie schützen parametrisierte Abfragen vor SQL-Injection?. 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