Fonction PHP : securiseFormulaireBDD()
Ici, vous pouvez voir (et copier/coller) le code complet de la fonction PHP securiseFormulaireBDD(). N'hésitez pas voter pour cette fonction si elle vous plaît ou si vous vouv en servez !
securiseFormulaireBDD() ajouté le 2009-05-15 09:20:54 par Laëtitia
function securiseFormulaireBDD($champs){
if(get_magic_quotes_gpc()) //On vérifie si le serveur a activé l'option magic_quotes_gpc
$resultat = $donnee; // SI oui on ne modifie pas la chaîne
else
$resultat = mysql_real_escape_string($donnee); //Sinon on reformate la chaîne avec les caractère d'échappement
return $resultat; // On retourne le résultat
}
Cette fonction permet l'enregistrement et la sécurisation des requête MySQL sans aucune erreur même si le site change d'hébergeur et que la fonction magic_quote_gpc n'a pas la même valeur. Cela évite également de double les \' lorsque magic_quote_gpc est désactivé et qu'on applique mysql_real_escape_string quand même.
Commentaires sur la fonctions php
Mazzu 19/05/2009 à 23:23
@Hugo : Utiliser les requêtes préparées est une bonne pratique mais mysql_real_escape_string() n'est pas de la "bidouille" non plus. On préfèrera utiliser les requêtes préparées mais parfois elles ne sont pas utilisable (e.g. : les extensions qui en ont ne sont pas chargé).
@Laëtitia : Les "magic_quotes_gpc" ne sont pas une protection suffisante et tu ne tiens pas compte "magic_quotes_sybase". De plus, je considère (ça n'engage que moi) que récupérer les données postées et les échapper avant de les mettre en base de données sont complètement indépendante. Je te propose donc les fonctions suivantes :
function getFormulaireBDD($champs) {
// On vérifie si le serveur a activé l'option magic_quotes_gpc
if (get_magic_quotes_gpc() || ini_get('magic_quotes_sybase')) {
// Si oui on ne modifie pas la chaîne
return stripslashes($champs);
}
// Sinon on reformate la chaîne avec les caractère d'échappement
return $champs;
}
function securiseFormulaireBDD($champs) {
return mysql_real_escape_string($champs);
}
Hugo 18/05/2009 à 19:58
Cette fonction est fausse et peut s'écrire bien plus simplement comme le code de correction fournit ici. D'autre part, il faut rappeler que mysql_real_escape_string() est à laisser tomber au profit des extensions MySQLi et PDO qui supportent les requêtes préparées, et donc la sécurité en natif sans bidouille.