Das beste MySQL und SQL-Injection-Tutorial im Jahr 2024. In diesem Tutorial können Sie Verhindern, dass SQL-Injection,Wie Aussage Injektion, lernen
Wenn Sie die Daten durch den Benutzer über das Web eingegeben bekommen und es in eine MySQL-Datenbank einfügen, dann ist es möglich, SQL-Injection-Sicherheitsprobleme.
In diesem Abschnitt wird Ihnen sagen, wie SQL-Injection zu verhindern, und SQL-Injection-Zeichen in einem Skript zu filtern.
Die so genannte SQL-Injection, ist durch den SQL-Befehl in das Web-Formular oder den Domain-Namen oder Seitenabfragesuche Zeichenfolge eingeben und schließlich Server täuschen auf bösartige SQL-Befehle auszuführen.
Wir haben nie das Vertrauen von Benutzereingaben, müssen wir die Daten, die vom Benutzer eingegebenen identifizieren unsicher sind, müssen wir alle für die Prozessbenutzereingabe Datenfilterung.
Das folgende Beispiel trat der Benutzername eine Kombination aus Buchstaben, Zahlen und Unterstrichen werden muss, und der Benutzername Länge zwischen 8-20 Zeichen:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Lassen Sie uns die Situation zu betrachten, wenn es keine SQL-Filter Sonderzeichen angezeigt werden:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysql_query("SELECT * FROM users WHERE name='{$name}'");
Vor Injektion Aussage, haben wir nicht die Variable $ name zu filtern, $ name wir brauchen nicht die SQL-Anweisung einfügen, werden alle Daten in der Tabelle Benutzer löschen.
mysql_query in PHP () ist nicht erlaubt mehrere SQL-Anweisungen ausführen, aber in SQLite und PostgreSQL können mehrere SQL-Anweisungen gleichzeitig ausführen, so dass die Nutzer dieser Daten wir strenge Überprüfung benötigen.
Verhindern, dass SQL-Injection, müssen wir die Aufmerksamkeit auf die folgenden Punkte zu achten:
In Skriptsprachen wie Perl und PHP Sie die Daten durch den Benutzer eingegeben, um entweichen kann SQL-Injection zu verhindern.
PHP MySQL-Erweiterung stellt die mysql_real_escape_string () Funktion spezielle Eingabezeichen zu entkommen.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name='{$name}'");
wenn der Benutzer einen Wert von "_" und "%" kommt, dann geschieht dies, wie die Abfrage,: Der Benutzer wurde nur Abfrage "abcd_" versucht, Abfrage-Ergebnisse dort "ABCD _", "ABCDE", "abcdf" haben Probleme:; etc Benutzer die "30%" (dreißig Prozent) Hinweis abzufragen.
Im PHP-Skript, können wir addcslashes () verwenden Sie die Funktion des obigen Fall, werden die folgenden Beispiele zu behandeln:
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_ mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes () Funktion, bevor sie mit einem Backslash angegeben.
Syntax:
addcslashes(string,characters)
Parameter | Beschreibung |
---|---|
Schnur | Erforderlich. So überprüfen Sie die angegebene Zeichenfolge. |
Zeichen | Optional. Vorgeschrieben durch addcslashes () beeinflussen Zeichen oder Zeichenketten. |
Sie können die spezifische Anwendung anzuzeigen: die PHP addcslashes () Funktion