PHP mysql_real_escape_string() functie

Definitie en gebruik

De mysql_real_escape_string() functie ontsnapt speciale tekens in de tekenreeks die in de SQL-uitvoer worden gebruikt.

De volgende tekens zijn beïnvloed:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

Als het succesvol is, retourneert deze functie de geëscaped tekenreeks. Als het mislukt, retourneert het false.

Syntax

mysql_real_escape_string(string,connection)
Parameters Beschrijving
string Verplicht. Bepaal de te ontsnappen tekenreeks.
connection Optioneel. Bepaal de MySQL-verbinding. Als dit niet wordt opgegeven, wordt de vorige verbinding gebruikt.

Beschrijving

Deze functie zal string van speciale tekens ontsnappen, en rekening houdend met de huidige character set van de verbinding, kan het veilig worden gebruikt voor mysql_query().

Tips en opmerkingen

Tips:Men kan deze functie gebruiken om database-aanvallen te voorkomen.

Voorbeeld

Voorbeeld 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Kon niet verbinden: ' . mysql_error());
  }
// Code om gebruikersnaam en wachtwoord te verkrijgen
// Escape gebruikersnaam en wachtwoord om ze in SQL te gebruiken
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// Meer code
mysql_close($con);
?>

Voorbeeld 2

Database-aanval. Dit voorbeeld demonstreert wat er gebeurt als we mysql_real_escape_string() functie niet toepassen op gebruikersnaam en wachtwoord:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Kon niet verbinden: ' . mysql_error());
  }
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql);
// Controleert niet de gebruikersnaam en het wachtwoord
// Kan elke inhoud van de gebruikersinvoer zijn, bijvoorbeeld:
$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";
// Enkele code...
mysql_close($con);
?>

dan dan SQL zoekopdracht zal zo worden:

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

Dit betekent dat gebruikers geen geldig wachtwoord hoeven in te voeren om in te loggen.

Voorbeeld 3

Correcte manier om database-aanvallen te voorkomen:

<?php
function check_input($value)
{
// Verwijder backslashes
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// Als het niet een getal is, voeg dan aanhalingstekens toe
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Kon niet verbinden: ' . mysql_error());
  }
// Voer een veilige 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);
?>