PHP
Referenzliste
mysql_real_escape_string
MySQL-Funktionen
Befehl:
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
Parameter-Liste:
Beschreibung | |
---|---|
Der zu maskierende String. | |
Die MySQL-Verbindung. Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen. Falls keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen, wie es beim Aufruf von mysql_connect() ohne Angabe von Argumenten der Fall wäre. Falls zufällig keine Verbindung gefunden oder aufgebaut werden kann, wird eine Warnung der Stufe E_WARNING erzeugt. |
Rückgabewerte:
Gibt einen maskierten String oder im Fehlerfall
FALSE
zurück. Beschreibung:
Maskiert spezielle Zeichen im unescaped_string unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung, so dass das Ergebnis ohne Probleme in mysql_query() verwendet werden kann. Wenn Sie Binärdaten einfügen wollen, müssen Sie die Funktion auf jeden Fall verwenden.
mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per Query an MySQL übermittelt werden.
mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per Query an MySQL übermittelt werden.
Aktiv in Version:
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
Hinweis:
Hinweis:
Sie müssen eine Verbindung zu MySQL geöffnet haben, bevor Sie mysql_real_escape_string() verwenden, ansonsten erhalten Sie einen Fehler vom Typ
E_WARNING
und der Rückgabewert wird zu FALSE
. Ist link_identifier
nicht angegeben, wird die letzte MySQL-Verbindung verwendet.Ist magic_quotes_gpc aktiviert, wenden Sie zuerst stripslashes() auf die Daten an. Das Bearbeiten bereits in irgend einer Form maskierter Daten durch mysql_real_escape_string führt ansonsten dazu, dass bereits Maskiertes doppelt maskiert wird.
Wenn die Funktion nicht verwendet wird, um die Daten zu maskieren, ist der Query anfällig für SQL Injection Angriffe.
mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.
Warnung:
Warnung:
Diese Erweiterung ist ab PHP 5.5.0 veraltet und wird in der Zukunft entfernt werden. Stattdessen wird der MySQLi oder PDO_MYSQL Verlängerung verwendet werden. Siehe auch MySQL: Auswahl einer API Führung und bezogenen FAQ für weitere Informationen. Alternativen zu dieser Funktion sind:
Siehe auch:
Liefert den Namen des Zeichensatzes
Stellt bestimmten Zeichen eines Strings ein "\" voran
Entfernt aus einem gequoteten String alle Quotes
Die magic_quotes_gpc-Direktive
Die magic_quotes_runtime-Direktive
mysql_real_escape_string() - Beispiel:
Eingabe:
<?php // Verbindung herstellen $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error()); // Anfrage erstellen $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>
mysql_real_escape_string() - Beispiel 2: Ein beispielhafter SQL Injection Angriff
Eingabe:
<?php // Datenbankabfrage zur Ueberpruefung der Logindaten $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; mysql_query($query); // Wir haben $_POST['password'] nicht geprueft, es koennte also alles darin // stehen, was der User will. Zum Beispiel: $_POST['username'] = 'aidan'; $_POST['password'] = "' OR ''='"; // Das bedeutet, der an MySQL gesendete Query wuerde sein: echo $query; ?>
Ausgabe:
Die Abfrage, die an MySQL �bermittelt wird:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Dies w�rde jedermann erlauben, sich ohne valides Passwort einzuloggen.
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Dies w�rde jedermann erlauben, sich ohne valides Passwort einzuloggen.
Beschreibung:
Wenn die Funktion nicht verwendet wird, um die Daten zu maskieren, ist der Query anf�llig f�r SQL Injection Angriffe.
mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.
mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.
MySQL-Funktionen