Cet article présente la différence entre l'utilisation de mysql_real_escape_string pour trier et traiter les données soumises par l'utilisateur et l'utilisation de trois fonctions similaires : addlashes et mysql_escape_string. Les données échappées peuvent être insérées directement dans la base de données.
C'est une bonne explication de la différence entre addlashes et mysql_real_escape_string. Bien que de nombreux codeurs PHP nationaux s'appuient encore sur addlashes pour empêcher l'injection SQL (moi y compris), je recommande toujours à tout le monde de renforcer les contrôles pour empêcher l'injection SQL en chinois. Le problème avec les addlashes est que les pirates peuvent utiliser 0xbf27 pour remplacer les guillemets simples, tandis que les addlashes ne changent que 0xbf27 en 0xbf5c27, qui devient un caractère multi-octets valide. 0xbf5c est toujours considéré comme un guillemet simple, donc les addlashes ne peuvent pas être interceptés avec succès.
Bien sûr, les addlashes ne sont pas inutiles. Ils sont utilisés pour traiter les chaînes à un octet. Pour les caractères multi-octets, utilisez mysql_real_escape_string.
De plus, pour l'exemple de get_magic_quotes_gpc dans le manuel PHP :
si (!get_magic_quotes_gpc()) {
$nom = ajoute des cils($_POST['nom']);
} autre {
$nom = $_POST['nom'];
}
Il est préférable de vérifier $_POST['lastname'] lorsque magic_quotes_gpc est déjà ouvert.
Parlons de la différence entre les deux fonctions mysql_real_escape_string et mysql_escape_string :
mysql_real_escape_string ne peut être utilisé que lorsque (PHP 4 >= 4.3.0, PHP 5). Sinon, vous ne pouvez utiliser que mysql_escape_string. La différence entre les deux est :
mysql_real_escape_string prend en compte le jeu de caractères actuel de la connexion, contrairement à mysql_escape_string.
Pour résumer :
addlashes() est un ajout forcé ;
mysql_real_escape_string() déterminera le jeu de caractères, mais il existe des exigences pour la version PHP.
mysql_escape_string ne prend pas en compte le jeu de caractères actuel de la connexion ;