Heim  >  Artikel  >  Backend-Entwicklung  >  Erste Schritte mit PHP: SQL-Injection

Erste Schritte mit PHP: SQL-Injection

王林
王林Original
2023-05-20 11:30:102167Durchsuche

Erste Schritte mit PHP: SQL-Injection

Mit der rasanten Entwicklung des Internets werden Webanwendungen immer beliebter und ihre Sicherheit gibt Anlass zu großer Sorge. SQL-Injection ist eine häufige Angriffsmethode in Webanwendungen. Sie kann schwerwiegende Sicherheitsprobleme verursachen und den normalen Betrieb von Webanwendungen beeinträchtigen. Beim Erlernen und Verwenden von PHP ist es sehr wichtig, die relevanten Kenntnisse der SQL-Injection zu verstehen und zu beherrschen.

SQL-Injection bezieht sich auf eine Angriffsmethode, bei der ein Angreifer bösartige SQL-Anweisungen in eine Webanwendung eingibt, um die Authentifizierung zu umgehen, auf Datenbankdaten zuzugreifen und nicht autorisierte Vorgänge auszuführen. SQL-Injection-Angriffe machen sich das Vertrauen der Webanwendung in die vom Benutzer eingegebenen Daten zunutze. Der Angreifer fälscht die vom Benutzer eingegebenen Daten und ermöglicht der Webanwendung, sie als vertrauenswürdige Daten zu behandeln.

Im Folgenden wird ein einfaches Anmeldeformular als Beispiel verwendet, um die Prinzipien und vorbeugenden Maßnahmen der SQL-Injection vorzustellen.

In PHP werden DBMS normalerweise über zwei Erweiterungen verbunden: mysqli und PDO. In diesem Artikel wird mysqli als Beispiel verwendet.

Zuerst erstellen wir ein Anmeldeformular und der Benutzer gibt den Benutzernamen und das Passwort ein:

<!DOCTYPE html>
<html>
<head>
    <title>Login form</title>
</head>
<body>

    <form method="post" action="login.php">
        <label for="username">Username:</label>
        <input type="text" name="username" id="username" required>
        <br>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password" required>
        <br>
        <input type="submit" value="Login">
    </form>

</body>
</html>

Als nächstes vergleichen wir den vom Benutzer eingegebenen Benutzernamen und das Passwort mit den Daten in der Datenbank. Wenn die Übereinstimmung erfolgreich ist, erfolgt die Anmeldung erfolgreich, andernfalls ist die Anmeldung fehlgeschlagen.

<?php
$db_servername = "localhost";
$db_username = "username";
$db_password = "password";
$db_name = "database_name";

// create connection
$conn = mysqli_connect($db_servername, $db_username, $db_password, $db_name);

// check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// get user input
$user = $_POST["username"];
$pass = $_POST["password"];

// process user input
$sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
$result = mysqli_query($conn, $sql);

// check result
if (mysqli_num_rows($result) > 0) {
    echo "Login success.";
} else {
    echo "Login failed.";
}

// close connection
mysqli_close($conn);
?>

Der obige Code sieht großartig aus, hat aber ein ernstes Problem: Er ist anfällig für SQL-Injection-Angriffe.

Der Angreifer kann den folgenden Inhalt in das Eingabefeld für Benutzername und Passwort eingeben:

' OR '1'='1

Zu diesem Zeitpunkt lautet die generierte Abfrageanweisung:

SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'

Diese SQL-Anweisung gibt die Datensätze aller Benutzer zurück, also unabhängig vom eingegebenen Benutzernamen und Passwort. Unabhängig davon, ob es korrekt ist oder nicht, können Sie sich erfolgreich anmelden. So funktionieren SQL-Injection-Angriffe.

Um SQL-Injection-Angriffe zu vermeiden, müssen Sie beim Umgang mit vom Benutzer eingegebenen Daten vorsichtig sein. Hier einige Vorsichtsmaßnahmen:

  1. Verwenden Sie parametrisierte Abfragen wie mysqli oder PDO und fügen Sie vom Benutzer eingegebene Daten nicht direkt in SQL-Anweisungen ein.
  2. Führen Sie eine strenge Überprüfung und Filterung aller Eingabedaten durch, z. B. Entfernen von Leerzeichen, Filtern von Sonderzeichen usw.
  3. Legen Sie die Sicherheitsrichtlinien des Programms fest, z. B. die Einschränkung der von Benutzern eingegebenen Daten, um das Risiko einer SQL-Injection so weit wie möglich zu reduzieren.
  4. Konfigurieren Sie die Sicherheit der Datenbank, indem Sie beispielsweise Administratoren verbieten, sich als Root-Benutzer anzumelden, den Netzwerkzugriff einzuschränken usw.

Kurz gesagt: Wenn Sie Webanwendungen schreiben, sei es mit PHP oder anderen Sprachen, müssen Sie das Problem von SQL-Injection-Angriffen ernst nehmen. Nur durch die Stärkung des Verständnisses und der Prävention von SQL-Injection-Angriffen können wir den sicheren Betrieb von Webanwendungen besser schützen.

Das obige ist der detaillierte Inhalt vonErste Schritte mit PHP: 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