mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)

mysql_real_escape_string Maskiert spezielle Zeichen innerhalb einer Zeichenkette für die Verwendung in einer SQL-Anweisung

Warnung

Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. Verwenden Sie stattdessen die Erweiterungen MySQLi oder PDO_MySQL. Weitere Informationen finden Sie im Ratgeber MySQL: Auswahl einer API. Alternativen zu dieser Funktion umfassen:

Beschreibung

mysql_real_escape_string(string $unescaped_string, resource $link_identifier = NULL): string

Maskiert spezielle Zeichen in 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 (mit wenigen Ausnahmen) immer verwendet werden, um Daten abzusichern, bevor sie per Abrage an MySQL übermittelt werden.

Achtung

Sicherheit: Der Standardzeichensatz

Der Zeichensatz muss entweder auf Ebene des Servers oder mittels der API-Funktion mysql_set_charset() gesetzt werden, damit dieser mysql_real_escape_string() beeinflusst. Siehe das Grundlagenkapitel zum Thema Zeichensätze für mehr Informationen.

Parameter-Liste

unescaped_string

Die zu maskierende Zeichenkette.

Verbindungs-Kennung

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 eine maskierte Zeichenkette zurück oder im Fehlerfall false.

Fehler/Exceptions

Wird diese Funktion ohne MySQL-Verbindung ausgeführt, werden ebenfalls PHP-Fehler der Stufe E_WARNUNG ausgelöst. Diese Funktion sollte nur mit einer gültigen MySQL-Verbindung verwendet werden.

Beispiele

Beispiel #1 Einfaches mysql_real_escape_string()-Beispiel

<?php
// Verbindung herstellen
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

// Abfrage erstellen
$query sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            
mysql_real_escape_string($user),
            
mysql_real_escape_string($password));
?>

Beispiel #2 mysql_real_escape_string() benötigt eine Verbindung

Diese Beispiel verdeutlicht, was geschieht, wenn beim Aufruf dieser Funktion keine MySQL-Verbindung vorhanden ist.

<?php
// Wir sind nicht mit MySQL verbunden

$lastname  "O'Reilly";
$_lastname mysql_real_escape_string($lastname);

$query "SELECT * FROM actors WHERE last_name = '$_lastname'";

var_dump($_lastname);
var_dump($query);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Warning: mysql_real_escape_string(): No such file or directory in /this/test/script.php on line 5
Warning: mysql_real_escape_string(): A link to the server could not be established in /this/test/script.php on line 5

bool(false)
string(41) "SELECT * FROM actors WHERE last_name = ''"

Beispiel #3 Ein beispielhafter SQL-Injection-Angriff

<?php
// Wir haben $_POST['password'] nicht überprüft, es könnte
// jeder beliebiger Wert sein, den der Benutzer will!
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// Datenbankabfrage zur Ueberpruefung der Logindaten
$query "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// Das bedeutet, der an MySQL gesendete Query wuerde sein:
echo $query;
?>

Die Abfrage, die an MySQL übermittelt wird:

SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

Dies würde jedem erlauben, sich ohne valides Passwort einzuloggen.

Anmerkungen

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.

Hinweis:

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.

Hinweis:

Wenn die Funktion nicht verwendet wird, um die Daten zu maskieren, ist die Abfrage anfällig für SQL-Injection-Angriffe.

Hinweis: mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

[Wichtig] Anmeldung im Forum

Guess the hidden word using logic and deduction in the engaging game of Wordle. Wordle nyt (https://wordlenytimes.net/) ​

Geschrieben von lenytimes am 19.04.2024 19:21:45
Forum: Fragen/Vorschläge zum Forum
Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum