Latest web development tutorials

MySQL und SQL-Injection

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:

  • 1. Vertrauen Sie nie Benutzereingaben. Überprüfung von Benutzereingaben, können Sie reguläre Ausdrücke verwenden, oder begrenzen die Länge; Einzel- und doppelten Anführungszeichen "-" in der Umstellung.
  • 2. Verwenden Sie niemals dynamische Assembly SQL können Sie die Parameter der direkten Verwendung von SQL oder gespeicherte Prozeduren für die Datenabfrage Zugriff verwenden können.
  • 3. Nie Administratorrechte Datenbankverbindung verwenden begrenzte einzelne Berechtigungen für jede Anwendung die Datenbankverbindung verwenden.
  • 4. Speichern Sie keine vertraulichen Informationen direkt, Verschlüsselung oder Passwörter und sensible Informationen hash.
  • 5. Die Anwendung Ausnahmeinformationen sollten so wenige Anweisungen gegeben werden, ist es am besten, eine benutzerdefinierte Fehlermeldung Fehlermeldung Originalverpackung zu verwenden,
  • Der Nachweis 6.sql Injektionsstelle im Allgemeinen oder unterstützende Software-Plattform zu erfassen, die Software häufig SQL-Injection-Erkennungs-Tools jsky, Internet-Website-Website Milliarden Denken gibt es Sicherheitsplattform-Erkennungs-Tools verwendet. MDCSOFT SCAN mögen. MDCSOFT-IPS kann eine effektive Verteidigung SQL-Injection, XSS-Angriffe sein.

Verhindern, dass SQL-Injection

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}'");

Wie Aussage Injektion

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