Bonjour à tous,
Je me suis fait dire dans une des discussions du forum (http://forum.alsacreations.com/topic-20-52575-1.html dixit Felipe) que si les formulaires d'administration (donc qui ne sont pas ouverts au public et aux posts d'utilisateurs extérieurs) ne sont pas sécurisés avec htmlspecialchars ou htmlentites et autres fonctions de sécurisation, il y a un risque d'être victime d'injection de code javascript par exemple, pendant qu'on est connecté en tant qu'admin.
Il faut dire que jusqu'ici je pensais que le risque d'injection n'existait que pour les données venant des utilisateurs externes et qui doivent être stockées dans ma BDD (messages de forum par exemple). Donc pour les opérations d'admin pure et de rédaction d'articles de mon site (dont je stocke les textes en BDD) je ne me préoccupais pas d'utiliser les fonctions de sécurisation, puisque je suis l'unique producteur des textes stockés (je ne vais quand-même pas me hacker ou m'injecter moi-même... si ?
)
Et d'ailleurs, soit dit en passant, l'article de Wikipedia sur le Cross-Site Scripting (la faille XSS) impliquée ici : http://fr.wikipedia.org/wiki/Cross-site_scripting conseille entre autres de mettre un préfixe "us" ("user string") devant les variables contenant les données utilisateurs, pour les distinguer des autres, et protéger systématiquement ces variables "us". Cela laisse entendre que ce sont les seules qu'il faut vraiment craindre (ce que je pensais aussi), les autres ne présentant pas de risques d'injection.
Mais j'avoue que ce que Felipe m'a dit (et au sujet duquel je n'ai pas eu les renseignements complémentaires demandés, ce qui m'a conduit à chercher par moi-même) me turlupine depuis des semaines et des semaines déjà. N'ayant pu trouver de réponses dans mes diverses recherches, je redemande des précisions à ceux qui voudraient éclairer ma lanterne.
En effet, je ne vois pas comment on peut introduire du code dans ma base (pendant que je suis connecté comme admin), alors que tout l'ensemble de mon dossier admin est protégé par mot de passe, avec .htaccess et .htpasswd. Normalement donc, si quelqu'un tente d'envoyer des données de l'extérieur (via un formulaire parallèle et en indiquant comme cible "action" une de mes pages de formulaires d'admin) il lui est demandé le login/password avant d'accéder à ma page d'admin. J'ai simulé le genre d'attaque dont j'ai eu connaissance et à chaque fois, si je ne fournis pas les bons identifiants, mon "formulaire pirate" ne peut pas injecter du javascript par exemple. Bon, ceci dit, je suis un très mauvais hacker...
Alors comment est-ce possible ? Dites-moi tout s'il vous plaît, pour juger s'il faut vraiment reprendre tous mes scripts et foutre htmlspecialchars ou htmlentities partout où je traite les données de formulaires d'ADMIN. Merci d'avance.
Modifié par somdina (15 Jan 2011 - 05:42)
Je me suis fait dire dans une des discussions du forum (http://forum.alsacreations.com/topic-20-52575-1.html dixit Felipe) que si les formulaires d'administration (donc qui ne sont pas ouverts au public et aux posts d'utilisateurs extérieurs) ne sont pas sécurisés avec htmlspecialchars ou htmlentites et autres fonctions de sécurisation, il y a un risque d'être victime d'injection de code javascript par exemple, pendant qu'on est connecté en tant qu'admin.
Il faut dire que jusqu'ici je pensais que le risque d'injection n'existait que pour les données venant des utilisateurs externes et qui doivent être stockées dans ma BDD (messages de forum par exemple). Donc pour les opérations d'admin pure et de rédaction d'articles de mon site (dont je stocke les textes en BDD) je ne me préoccupais pas d'utiliser les fonctions de sécurisation, puisque je suis l'unique producteur des textes stockés (je ne vais quand-même pas me hacker ou m'injecter moi-même... si ?

Et d'ailleurs, soit dit en passant, l'article de Wikipedia sur le Cross-Site Scripting (la faille XSS) impliquée ici : http://fr.wikipedia.org/wiki/Cross-site_scripting conseille entre autres de mettre un préfixe "us" ("user string") devant les variables contenant les données utilisateurs, pour les distinguer des autres, et protéger systématiquement ces variables "us". Cela laisse entendre que ce sont les seules qu'il faut vraiment craindre (ce que je pensais aussi), les autres ne présentant pas de risques d'injection.
Mais j'avoue que ce que Felipe m'a dit (et au sujet duquel je n'ai pas eu les renseignements complémentaires demandés, ce qui m'a conduit à chercher par moi-même) me turlupine depuis des semaines et des semaines déjà. N'ayant pu trouver de réponses dans mes diverses recherches, je redemande des précisions à ceux qui voudraient éclairer ma lanterne.
En effet, je ne vois pas comment on peut introduire du code dans ma base (pendant que je suis connecté comme admin), alors que tout l'ensemble de mon dossier admin est protégé par mot de passe, avec .htaccess et .htpasswd. Normalement donc, si quelqu'un tente d'envoyer des données de l'extérieur (via un formulaire parallèle et en indiquant comme cible "action" une de mes pages de formulaires d'admin) il lui est demandé le login/password avant d'accéder à ma page d'admin. J'ai simulé le genre d'attaque dont j'ai eu connaissance et à chaque fois, si je ne fournis pas les bons identifiants, mon "formulaire pirate" ne peut pas injecter du javascript par exemple. Bon, ceci dit, je suis un très mauvais hacker...

Alors comment est-ce possible ? Dites-moi tout s'il vous plaît, pour juger s'il faut vraiment reprendre tous mes scripts et foutre htmlspecialchars ou htmlentities partout où je traite les données de formulaires d'ADMIN. Merci d'avance.
Modifié par somdina (15 Jan 2011 - 05:42)