Bonjour,
J'ai pour l'instant fini le gros de mon code de la première version de mon site.
Et là je m'intéresse très particulièrement à la sécurité.
Avec mes différentes petite recherches j'ai découvert plusieurs fonctions permettant de protégé des variables contre les injection sql. Mais je commence un peu à m'embrouiller.
addslashes()
stripslashes()
htmlspecialchars()
msql_real_escape_string()
Sont celles que je connais.
Si je contrôle les informations qui entrent dans la base de données, est-ce que je dois aussi contrôlée celle qui en sortent (donc qui sont affichées) ?
stripslashes() est pas mal pour viré les slash, mais prenons par exemple un formulaire de post de commentaire sur un article. Je dois contrôler le contenu, si je rajoute des slashe (avec addslashes() ) à l'entrée du script, mais que je les retires ensuite (avec stripslashes() ), cela pourrait activer un javascript par exemple ?
Je n'ai pas encore très bien compris ce que fait réellement htmlspecialchars(), est-ce qu'il rajoute ou enlève t-il des caractères ? (j'ai plus l'impression que c'est pour éviter de pouvoir mettre du code html, mais je n'en suis pas sûr).
Pour mysql_real_escape_string(), si j'ai bien compris je dois l'utiliser QUE pour contrôler les infos qui sont entrée dans un formulaire mis à disposition sur le site ?
Mais avec toutes ces fonction, je me perd un peu et je n'arrive pas à savoir exactement dans quel cas les utiliser.
Donc pour préciser ma question :
Quelles fonctions dois-je préférer dans les deux cas suivant :
1. Lorsque l'utilisateur entre des données via un formulaire.
2. Lorsque je prend des infos de la base et qu'un code pourrait y être contenu.
Merci d'avance pour votre aide :)
Golgota
EDIT : Bon après encore quelques recherches et quelques lectures en plus voici ce que j'en conclu (et dites moi si je me trompe) :
htmlspecialchars() : Change des caractères propre au html pour qu'ils soient lisible comme par exemple quand on prend un texte, dans une base de données, qui doit affiché le code pour qu'il soit lu. Donc ça évite d'executer du code.
addslashes() : Ajoute des anti-slash pour évité l'utilisation de caractère comme les ' ou les " . Donc ça permet d'éviter une injection sql.
mysql_real_escape_string() : Permet d'empecher l'utilisation de chaînes de caractères comme NULL, \x00, \n, \r, \, ', " et \x1a. Empêche les injection sql.
et enfin stringslashes() : Enlève les anti-slash dans une chaine de caractères.
Donc si j'ai bien compris :
htmlspecialchars(), addslashes() et mysql_real_escape_string() sont à appliquées lors de l'envoie de donnée dans la base de données. Et ce pour éviter d'injecter du code.
Et addslashes() doit être utilisé lors de l'affichage des données pour éviter d'avoir des anti-slash dès qu'on veut afficher des phrase avec des ' ou des " .
Voilà, me trompes-je ? :D