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);
?>