Funzione mysql_real_escape_string() di PHP

Definizione e uso

La funzione mysql_real_escape_string() escapata i caratteri speciali delle stringhe utilizzate nelle espressioni SQL.

I seguenti caratteri sono influenzati:

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

Se ha successo, la funzione restituisce la stringa escapata. Se fallisce, restituisce false.

Sintassi

mysql_real_escape_string(string,connection)
Parametro Descrizione
string Obbligatorio. Specifica la stringa da escapare.
connection Opzionale. Specifica la connessione MySQL. Se non specificato, viene utilizzata l'ultima connessione.

Descrizione

Questa funzione string dei caratteri speciali vengono escapati, e tenendo conto del set di caratteri corrente della connessione, può essere usato in modo sicuro per mysql_query().

Suggerimenti e commenti

Suggerimento:Puoi usare questa funzione per prevenire gli attacchi al database.

Esempio

Esempio 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Impossibile connettersi: ' . mysql_error());
  }
// Codice per ottenere l'username e la password
// Eseguire l'escape degli username e delle password per usarli in SQL
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// Più codici
mysql_close($con);
?>

Esempio 2

Attacco al database. Questo esempio dimostra cosa potrebbe accadere se non applichiamo la funzione mysql_real_escape_string() agli username e alle password:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Impossibile connettersi: ' . mysql_error());
  }
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'"
mysql_query($sql);
// Non verifica il nome utente e la password
// Può essere qualsiasi contenuto inserito dall'utente, ad esempio:
$_POST['user'] = 'john';
$_POST['pwd'] = '" OR ''='";
// Alcuni codici...
mysql_close($con);
?>

Allora, la query SQL diventerà così:

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

Questo significa che qualsiasi utente può accedere senza dover inserire una password valida.

Esempio 3

Pratiche corrette per prevenire gli attacchi al database:

<?php
function check_input($value)
{
// Rimuovere le barre oblique
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// Se non è un numero, aggiungere virgolette
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Impossibile connettersi: ' . mysql_error());
  }
// Eseguire SQL sicuro
$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);
?>