Partage
  • Partager sur Facebook
  • Partager sur Twitter

la faille upload

    15 juillet 2019 à 23:40:41

    Bonjour

    j'ai un problème avec ce script qui a été extrait du cours protégez vous contre les failles web.

    $nom ='image.jpg';

    $handle = fopen($nom, 'r');

    if ($handle) {

        while (!feof($handle) AND $error == 0) {

            $buffer = fgets($handle);

            switch (true) {

                case strstr($buffer, '<'):

                $error = true;

                break;

                case strstr($buffer,'>'):

                $error += 1;

                 break;

            }

        }

    }

    fclose($handle);

    if ($error == true) {

    unlink($nom);

    }

    ?>

    En effet ce scripte php a pour but de vérifier si une image contient du code et de le supprimer. Mais je n'ai pas ce résultat, même les images qui ne contiennent pas de code php sont supprimés. quelqu'un  peut-il m'expliquer le pourquoi , ou me proposer une autre solution pour lutter contre la faille upload?

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2019 à 10:07:55

      Salut,

      Je ne sais pas si tu as déjà ouvert une image avec un éditeur hexadécimal, mais tu te serais rendu compte que ce code et complètement erroné.

      Le but de la faille upload est d'injecter du code dans un fichier quelconque, le plus souvent une image. Tu as plusieurs solutions:

      - Vérifier l'extension (ca ne protège pas, mais c'est fondamentale).

      - Vérifier le type mime renvoyer.

      - Si c'est bien une image, tu peux donc normalement récupérer des données comme les dimensions, si tu n'y parviens pas, c'est que l'image est altérée.

      - Vérifiez la signature du fichier (dans le header), chaque type de fichier à une en-tête bien précis pour être reconnu comme tel. (https://www.garykessler.net/library/file_sigs.html)

      - Passer par un script php qui renvoie un header correspondant au type de l'image pour l'affichage.

      Ils en existent sûrement d'autre, mais c'est ce qui me vient à l'esprit.

      -
      Edité par xoxotf 16 juillet 2019 à 10:28:22

      • Partager sur Facebook
      • Partager sur Twitter
        16 juillet 2019 à 19:03:39

        Bonjour,

        Une solution intéressante serait aussi de bien configurer ton serveur web. Si tu acceptes des fichiers provenant des utilisateurs, tu devrais systématiquement penser à ceci :

        • Mettre les fichiers dans un endroit isolé;
        • Mettre les bons chmods aux dossiers contenant les fichiers;
        • Voir à configurer Nginx, Apache, IIS (ou autre) afin de ne pas autoriser de code PHP à être exécuté dans ces dossiers;
        •  Aller plus loin dans cette dernière configuration et forcer un type mime selon l'extension du fichier demandé;

        Il y a cette article qui propose quelques bons conseils : http://nullcandy.com/php-image-upload-security-how-not-to-do-it/

        Ensuite, au niveau de l'application, il est vrai qu'il faut faire plusieurs contrôles :

        • L'extension du fichier est-elle reconnu ?
        • Le type mime est-il ce que je m'attends à recevoir ?
        • Est-ce que l'image recréé à l'aide d'outil comme Imagick permet d'obtenir la même image ?
        • etc.

        Plus largement, on pourrait ajouter une couche de sécurité, avant même que l'utilisateur ne charge la page. Cela servirait à éviter qu'un utilisateur tente de briser la sécurité via des scripts exécuté en CURL :

        • Le user_agent de l'utilisateur fait-il du sens ?
        • Est-ce que le referer est possible ?
        • Est-ce que des cookies sont passés dans la requêtes ? Est-ce qu'il doit y en avoir ?
        • Est-ce qu'un captcha est envoyé (ou tout autre champ essentiel) en même temps que l'upload ?
        • etc.

        L'idée ici est de prévenir au maximum ce qui entre sur ton serveur. En effet, avant que PHP n'analyse le fichier, dis-toi qu'il a été uploadé sur le serveur dans un dossier temporaire. Cela pourrait donner quelques risques si on combine plusieurs failles à la fois.

        N'hésite pas s'il y a quoi que ce soit !

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 0:52:54

          vos propositions sont très intéressantes. Mais j'ai besoins que vous soyez plus précis sur certains points: 

          * comment vérifier l'user_agent?

          * le referer: je n'en sais pas grand chose.

          * quelles sont les fonction de imagick à utiliser pour procéder  aux vérifications?

          * parlant des bons chmods des dossiers 666 est bon? Doit-on aussi redéfinir les chmods des images uploader?

          *  la vérification de la signature du fichier me parait un peut difficile à mettre en oeuvre, car je n'ai aucune idée du script php.

          Du reste je vous reviens.

          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2019 à 9:57:01

            Tu peux obtenir toutes ces réponses sur un moteur de recherche ;) La documentation ne manque pas en PHP.
            Pour la vérification de la signature, c'est effectivement un peu bourrin, mais ce n'est pas sorcier, il suffit de lire le fichier.
            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2019 à 13:36:45

              Bonjour

              Après la mise en oeuvre de la solution de l'article nullcandy.com, j'ai constaté que le .htaccess bloque l'affichage des images au niveau de la page html. voici le code du  .htaccess:

              ForceType application/octet-stream

              <FilesMatch "(?i).jpe?g$">

                  ForceType image/jpeg

              </FilesMatch>

              <FilesMatch "(?i).gif$">

                  ForceType image/gif

              </FilesMatch>

              <FilesMatch "(?i).png$">

                  ForceType image/png

              </FilesMatch>

              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2019 à 13:53:54

                Où est-ce que tu as placé ton fichier .htaccess ?
                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2019 à 21:47:04

                  Dans le dossier qui contient les images comme le dossier upload/. Et le script php crée dans ce dossier un sous dossier avec l'id de l'utilisateur dans lequel il upload les images.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  la faille upload

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown