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