PHP mysql_real_escape_string() Funktion
Definition und Verwendung
Die Funktion mysql_real_escape_string() escapiert spezielle Zeichen in den Strings, die in SQL-Abfragen verwendet werden.
Die folgenden Zeichen sind betroffen:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
Falls erfolgreich, gibt die Funktion den escaped String zurück. Bei Fehler gibt sie false zurück.
Syntax
mysql_real_escape_string(string,connection)
Parameter | Beschreibung |
---|---|
string | Erforderlich. Gibt den zu escapenden String an. |
connection | Optional. Gibt die MySQL-Verbindung an. Wenn nicht angegeben, wird die vorherige Verbindung verwendet. |
Beschreibung
Diese Funktion wird string spezielle Zeichen werden escaped und die aktuelle Zeichensatzkonfiguration der Verbindung berücksichtigt, daher kann es sicher verwendet werden für mysql_query().
Hinweise und Kommentare
Hinweis:Diese Funktion kann verwendet werden, um Datenbankangriffe zu verhindern.
Beispiel
Beispiel 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Code, um Benutzername und Passwort zu erhalten // Die Benutzername und das Passwort werden escaped, um sicher in SQL verwendet zu werden $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // Mehr Code mysql_close($con); ?>
Beispiel 2
Datenbankangriff. In diesem Beispiel wird gezeigt, was passiert, wenn wir mysql_real_escape_string() nicht auf den Benutzernamen und das Passwort anwenden:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // Benutzername und Passwort nicht überprüfen // Es kann jeder Inhalt sein, der von der Benutzer-Eingabe kommt, zum Beispiel: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // Einige Code... mysql_close($con); ?>
Dann wird der SQL-Abfrage so aussehen:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
Das bedeutet, dass jeder Benutzer ohne gültiges Passwort anmelden kann.
Beispiel 3
Richtige Vorgehensweise zur Prävention von Datenbankangriffen:
<?php function check_input($value) { // Entfernen von Backslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Wenn nicht numerisch, dann füge Anführungszeichen hinzu if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Durchführung sicherer SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>