Échappez les caractères spéciaux dans unescaped_string, en prenant en compte les paramètres de connexion du caractère actuel afin qu'il soit bien en place dans mysql_query(). Si des données binaires doivent être insérées, cette fonction doit être utilisée
Les caractères suivants sont concernés :
En cas de succès, la fonction renvoie la chaîne échappée. En cas d'échec, renvoie false.
mysql_real_escape_string(string,connection)
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
Description
Cette fonction échappe aux caractères spéciaux dans une chaîne et prend en compte le jeu de caractères actuel de la connexion, elle peut donc être utilisée en toute sécurité avec mysql_query().
Conseils et remarques
Astuce : Vous pouvez utiliser cette fonction pour empêcher les attaques de bases de données.
Exemple
Exemple 1
// Code pour obtenir le nom d'utilisateur et le mot de passe
// Échapper au nom d'utilisateur et au mot de passe à utiliser dans SQL
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" $user . "' AND password='" $pwd .
mysql_close($con);
?>
Attaque de base de données. Cet exemple montre ce qui se passe si nous n'appliquons pas la fonction mysql_real_escape_string() au nom d'utilisateur et au mot de passe :
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql);
// Peut être n'importe quel élément saisi par l'utilisateur, tel que :
$_POST['user'] = 'john';
$_POST['pwd '] = "' OU ''='";
mysql_close($con);
?>
SELECT * FROM users
WHERE user='john' AND password='' OR ''='' Cela signifie que tout utilisateur peut se connecter sans saisir de mot de passe valide.
Méthode correcte pour empêcher les attaques de bases de données :
if (!$con)
{
die('Impossible de se connecter : ' . mysql_error()) ;
}
$user = check_input($_POST['user']);
$pwd = check_input($_POST['pwd']);
$sql = " SELECT * FROM utilisateurs WHERE
user=$user AND password=$pwd";
mysql_close($con);
?>