Addition de htmlspecialchars() et de mysql_real_escape_string()

Résolu/Fermé
maffiou Messages postés 37 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 9 mai 2013 - 13 avril 2013 à 23:35
maffiou Messages postés 37 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 9 mai 2013 - 14 avril 2013 à 09:45
Bonjour,

Je m'adresse à vous pour que vous m'éclairiez à propos d'une notion qui me semble pas très compliquée mais quelque peu subtile.

Cette notion c'est celle de la sécurisation des données récupérées via les formulaires. Après de longues recherches sur le Web, j'ai été sensibilisé aux injections SQL et aux failles XSS.

Pour contrer les premières, j'ai compris qu'il fallait ajouter mysql_real_escape_string() aux variables intervenant dans les requêtes d'intégration/de mise à jour de contenu de notre base de données. Cette fonction servant à échapper divers caractères comme les quotes, les guillemets, les backslashs, les \n, \r pour ce citer qu'eux.

Pour contrer les secondes, j'ai un peu plus de mal à comprendre. J'ai lu ci et là que les fonctions htmlentities()/htmlspecialchars() étaient appropriées (j'ai d'ailleurs porté mon choix, pour mon projet actuel, sur htmlspecialchars). Cependant, certaines personnes expliquaient que cette dernière (je ne parle à présent plus que d'htmlspecialchars) n'était utile que pour protéger les données issues de la BDD ... Je comprends par là que l'on doit sécuriser quelque chose lorsque l'on crée par exemple un menu déroulant à partir de données de la BDD ...
D'autres personnes expliquaient qu'elles sécurisaient doublement les données allant intervenir dans les requêtes d'intégration/de mise à jour de la BDD avec la syntaxe suivante : mysql_real_escape_string(htmlspecialchars($variable)) ...

Un doute s'est alors installé dans mon esprit au fur et à mesure de mes recherches (revers de la médaille du fait d'avoir une multitude de réponses différentes) ...

Dois-je doublement sécuriser les variables intervenant dans les requêtes (échappement de nombreux caractères spéciaux avec mysql_real_escape_string() + modification syntaxique d'autres caractères comme &, <,> avec htmlspecialschars()) ou dois séparer leur utilisation ... ?

Je vous remercie par avance pour votre aide,
Cordialement,
Maffiou.

2 réponses

C'est pas compliqué, tu peux injecter du code JS ou SQL. Si tu filtres le code SQL, dans ta BDD, tu la garde intacte, oké.

Mais si tu ne filtre pas les entrées HTML/JS, ta BDD relationnelle n'en fera rien et considèrera le texte comme un vulguaire STRING, par contre lorsque le contenu venant de la BDD va s'inscrire dans le code de la page, il est très probable que la navigateur puisse ré-exécuter le code venant de la BDD, et pire si c'est du PHP car là c'est le serveur qui va l'exécuter.
2
maffiou Messages postés 37 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 9 mai 2013 1
14 avril 2013 à 09:45
Bonjour,

Excellente réponse, merci beaucoup logisticien.

Sujet résolu,
Cordialement,
Maffiou.
0