8800 sujets

Développement web côté serveur, CMS

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 ? Smiley rolleyes )

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... Smiley lol

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)
Salut,

concernant la sécurité des formulaires de l'interface d'administration, il vaut mieux systématiquement prendre l'habitude de les protéger. Si tu ne la pas fais, que tu es le seul à utiliser cette interface et que ton site ne stocke pas des codes de lancement de missiles nucléaires à priori tu ne cours aucun risque.

Je te rassure, on ne peut pas introduire de code depuis ton admin sans y avoir accès.
Ca dépend, mais si c'est possible...

En affichant une image qui execute du code Php par exemple, si tu as une page comme ceci :
monsite.com/article/delete/18

qui permet de supprimer l'article dont l'id est 18, si tu utilises cette url pour src pour une image alors chaque personne effacera l'article 18 en tentant d'afficher l'image. Si les gens n'ont pas les droits, ça ne fera rien bien sûr, mais si l'admin vient sur la page par exemple, alors ça supprimera tout simplement l'article.

Ensuite il y a moyen me semble-t-il d'envoyer des reqûetes POST avec une librairie comme curl et là même principe : on simule l'envoit d'un formulaire, si on connait le nom des champs, on peut y mettre ce qu'on veut sans avoir accès au panneau d'admin, pour peu que les valeurs ne soient pas sécurisées après, ça peut faire mal.

Donc tout doit toujours être vérifié et sécurisé... Toujours, tout le temps. Y'a pas de risque 0.
HammHetfield a écrit :
Ensuite il y a moyen me semble-t-il d'envoyer des reqûetes POST avec une librairie comme curl et là même principe : on simule l'envoit d'un formulaire, si on connait le nom des champs, on peut y mettre ce qu'on veut sans avoir accès au panneau d'admin, pour peu que les valeurs ne soient pas sécurisées après, ça peut faire mal.


Dans ce cas précis, si la page qui est appelée avec curl vérifie d'abord si le visiteur est connecté en tant qu'admin avant de faire des requêtes il n'y a pas de risque.

Cependant je suis d'accord avec toi, il faut toujours sécuriser toutes les infos quelles qu'elles soient à partir du moment où elles proviennent d'un formulaire, où qu'il soit.
Modifié par Skoua (15 Jan 2011 - 20:01)