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:
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!