IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Sécurité sur les extensions .php dans une balise "img"


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 70
    Points
    70
    Par défaut Sécurité sur les extensions .php dans une balise "img"
    Bonjour à tous,

    je bosse actuellement sur un site où des membres peuvent ajouter des liens d'images.

    Appelons le site sur lequel je bosse : mon-site.com
    et le site d'un membre : site-membre.com

    Ma question porte essentiellement sur la sécurité :

    Si un membre ajoute un lien qui n'est pas une image mais une page .php
    (ok on peut tester l'extension mais l'utilisateur pourrait aussi faire de l'url rewriting et son lien en .jpg pointerait vert une page .php)

    Si à un moment sur une de mes pages web j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <img src="http://www.site-membre.com/page.php" alt="" />
    Est-ce que ce code est réèllement interprété comme une image ou pourrait-il réèllement exécuté une page php externe ?

    Est-ce une faille de sécurité ?
    Est-ce que si le membre mets du code php sur la page de son siten cela pourrait-il nuire à mon site ?

    Pourrait-il faire par exemple :
    - une connexion sur ma base de donnée, récupérer des infos etc...
    - injecter du code javascript ou html

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par gianni7033 Voir le message
    Est-ce que ce code est réèllement interprété comme une image ou pourrait-il réèllement exécuté une page php externe ?
    Oui : faille CSRF, le problème étant qu'il est ainsi possible de faire exécuter une action non désirée à quelqu'un (faire réaliser une action sur un jeu web de son propre compte par exemple). Une solution à cela étant de créer et intégrer un jeton généré aléatoirement, qui n'est valable qu'une courte période, propre à chaque client, le temps d'un traitement. (après cela dépend de la méthode d'envoi des données : ajax ou non, en post ou non - ce qui compliquera ou facilitera l'exploitation d'une telle faille)

    Mais si c'est un script PHP qui est ainsi appelé, c'est le serveur où il est hébergé qui l'interprétera bien sûr, pas vous [votre serveur], puisque c'est à la demande du client.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 70
    Points
    70
    Par défaut
    oula,

    on en apprend tous les jours.

    Donc si j'ai bien compris, un site assez connu (hebdotop.com) dont le code source à mettre sur notre site est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://www.hebdotop.com/cgi-bin/vote.eur?id=100" alt="" />
    il pourrait très bien attaquer mon site

    Il faut donc avoir une grande confiance dans les sites de statistiques.

    J'ai bien lu le lien CSRF et si j'ai bien compris, la seule solution que j'ai pour le script que je crée (à savoir : afficher une image situé sur le site d'un membre), il faut qu'avant d'afficher le code de l'image, je dois d'abord utiliser la fonction php getimagesize(). C'est bien ça ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    J'apportais une réponse généraliste (difficile de voir les choses autrement de toute manière à ce sujet).

    Je vais essayer d'être plus clair (avec le cas le plus trivial), d'autant plus que les CSRF ça peut être vicieux en étant indirectes et camouflées, ce qui est présenté en fin de l'article pointé ci-dessus.

    Admettons que vous soyez administrateur du site http://www.monsite.fr. Vous avez une "interface" pour supprimer les news de votre site dont l'adresse est : http://www.monsite.fr/admin/delete_news.php?id=X avec X l'id de la news à supprimer. L'accès étant protégé par un système de login/session.

    Qu'une personne connaisse l'existence de ce script (on ne sait comment mais là n'est pas la question) et sache comment l'utiliser (les paramètres attendus pour réaliser cette action et la méthode HTTP employée pour ce faire) bien qu'elle n'en ait pas l'accès. Avec une simple image comme :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://www.monsite.fr/admin/delete_news.php?id=3" />
    laissée sur votre propre site ou tout autre site, il suffit que vous lisiez la ressource où elle a été introduite (le sujet d'un forum par exemple). => Pouf, vous venez de supprimer la news numéro 3 de votre site sans même vous en rendre compte (en utilisant votre propre session, restée ouverte).

    Donc c'est votre site, surtout, qu'il faut protéger des CSRF (envoi des paramètres sous une forme plus adaptée pour vos scripts et/ou jetons, etc). Vous ne pouvez pas contrôler toutes les images (mais pas seulement) de provenance externe de votre propre site (ça demanderait des ressources supplémentaires sans être pour autant infaillible) et encore moins celles qui aboutissent chez vous (le referer est modifiable à volonté).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 109
    Points : 70
    Points
    70
    Par défaut
    Ha d'accord je comprend mieux, mais si je suis donc l'administrateur monsite.fr

    et que je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="http://www.unsite.fr/dropDatabaseAndDeleteFile.php" />
    le propriétaire du site unsite.fr ne saura pas détuire ma DB et mes fichiers ?

    Le code PHP exécuté seront fait sur SON site, il ne saura pas avoir accès au données de monsite.fr (même s'il connait où se trouve mon fichier de connexion db)

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Non c'est ce que j'ai écrit plus haut :
    Citation Envoyé par julp Voir le message
    Mais si c'est un script PHP qui est ainsi appelé, c'est le serveur où il est hébergé qui l'interprétera bien sûr, pas vous [votre serveur], puisque c'est à la demande du client.
    Le code PHP est interprété par son propre serveur. Après, même sans interprétation de celui-ci, vous ne le récupéreriez pas pour autant donc pas de risque de l'interpréter (en imaginant un instant cela possible), il serait destiné au client (puisque c'est lui qui demande cette ressource et non vous [votre serveur]).

    Même directement de serveur à serveur, à moins de choses comme appliquer bêtement un eval sur ce que nous renvoie l'autre ou d'accepter des fichiers (upload par exemple) sans contrôle et les laisser ensuite accessible via HTTP, ça n'arrive pas.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/06/2009, 17h43
  2. appeler un fichier php dans une balise <img>
    Par zeintsu dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/07/2008, 15h20
  3. Réponses: 2
    Dernier message: 15/02/2008, 17h47
  4. [Tableaux] code php dans une balise <select>
    Par bigjeef dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2007, 00h58
  5. Forcer les champ link dans une balise <a>
    Par jejeman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/03/2007, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo