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

Bibliothèques & Frameworks Discussion :

Sécurité : faille XSS et upload de fichiers malicieux pour l'insertion d'image


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Sécurité : faille XSS et upload de fichiers malicieux pour l'insertion d'image
    Bonjour,

    J'ai développé un site dont le backoffice utilise essentiellement des éditeurs TinyMCE avec insertion d'image par le plugin ajaxfilemanager de http://www.phpletter.com/DOWNLOAD/

    Le soucis c'est que je me demande si cet éditeur me protège des failles XSS?
    L'attaque dont je suis le plus souvent victime c'est que le hacker exploite l'upload d'image pour uploader du PHP malicieux (souvent d'extension .php.gif), puisqu'il connaît très bien le chemin de l'upload, il peut ensuite lancer ce php.

    Comment puis-je me protéger de cela?

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    D'une part, je pense qu'il y a un sérieux problème de sécurité dans le fait d'exposer un backoffice.
    Ensuite, tu peux tout simplement vérifier le nom de fichier uploadé mais pense à vérifier le \0 hack (je me rappelle plus mes références, si quelq'un peut confirmer ?) qui consiste à créer un fichier avec un nom illégal de la forme :
    Si je me rappelle bien, ce format de nom bypass les règles de sécurité habituelles.

    Dans un de mes script, j'utilisait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Contrôler le nom du fichier
      if (preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $file['name']) || (substr_count($file['name'],'.') > 1))
         return $ret .= "\t- Ce nom de fichier est interdit pour des raisons de s&eacute;curit&eacute; -\n</div>\n";
     
      // Contrôler l'extention du fichier
      $mimes = array("image/jpeg","image/gif","image/png");
      $type  = mime_type_file (strtolower($file['name']));
      if (!in_array($type,$mimes))
         return $ret .= "\t- Les fichiers " . $file['type'] . " ne sont pas support&eacute;s -\n</div>\n";
    Bref, vérifie bien le PHP appellé par Ajax et ajoute des sécurités si nécéssaire.

  3. #3
    Lucas Panny
    Invité(e)
    Par défaut
    Le backoffice n'est pas exposé, il est protégé par authentification login+mdp (session).
    Le soucis c'est que c'est ajaxfilemanager qui est exposé donc, le hacker imagine juste où peut se trouver le plugin et mon site est foutu. De plus, j'utilise le framework jelix donc il arrive bien à imaginer où il peut bien être.

    L'authentification est gérée par une classe php qui crée une variable globale $GLOBAL["user"], comment peut-on l'utiliser dans ajax_file_upload.php de AjaxFileManager for TinyMCE???

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Dans ajax_file_upload.php tu rajoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($GLOBALS['user']))
    {
        // do the upload stuff...
    }
    else die('You must login before uploading');
    ça fera partir les requêtes ajax en erreur si l'utilisateur n'est pas connecté. Je ne connais pas ta classe modèle User mais tu peux rajouter un contrôle basique des droits par dessus le marché.

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    J'ai déjà essayé cela mais cette variable est toujours NULL dans ce fichier, en effet j'utilise un framework php (JELIX) pour développer mon site, l'upload d'image étant une application tiers donc la portée de la variable paraît ne pas arriver jusque là

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Je ne connais pas Jelix en détail, désolé.
    Tu ne peux pas faire les include qui vont bien ?

    -- Edit

    Remarque, Jelix, comme tout ses petits copains, doit sauvegarder une instance d'utilisateur sur la session. Fais donc un coup de var_dump($_SESSION) dans ton index.php (celui de Jelix si tu en as plusieurs) et trouve l'index correspondant à l'objet ou la structure caractérisant l'Utilisateur. Ensuite tu n'a plus qu'a mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($_SESSION['< clé user >']))
    {
         // do upload stuff...
    }
    else die('You must be connected');

Discussions similaires

  1. Upload de fichiers que pour certains fichiers
    Par kate59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/02/2015, 18h26
  2. Réponses: 3
    Dernier message: 01/09/2012, 09h30
  3. [PHP 5.3] Uploade de fichier Zippe pour récupéré leur contenu
    Par geforce dans le forum Langage
    Réponses: 0
    Dernier message: 19/05/2010, 19h03
  4. Réponses: 0
    Dernier message: 25/01/2008, 07h55
  5. [Upload] Upload de fichiers : sécurité
    Par genova dans le forum Langage
    Réponses: 16
    Dernier message: 04/01/2006, 21h22

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