begin process at 2012 05 31 10:25:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

Divers

 > 

Securiser un upload !!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Securiser un upload !!

jeudi 15 décembre 2005 à 11:05:55 | Securiser un upload !!

SnOOpss

Bonjour je doit faire un systeme d'upload sur un site, sans inscriptions, donc le premier venu pourra uploader des fichiers sur le serveur et je voulait avoir votre avis sur la securité de mon code.

function do_upload($upload_dir, $upload_url) {

    $temp_name = $_FILES['userfile']['tmp_name'];
    $file_name = preg_replace("/ /","_",$_FILES['userfile']['name']);
    $file_type = $_FILES['userfile']['type'];
    $file_size = $_FILES['userfile']['size'];
    $result    = $_FILES['userfile']['error'];
    $file_url  = $upload_url.$file_name;
    $file_path = $upload_dir.$file_name;

    if ( $_FILES[ 'userfile' ][ 'error' ] != 0 ) {
         $message = "Erreur serveur";
        return $message;   
    }

    if ( $file_name =="") {
        $message = "Nom de fichier invalide";
        return $message;
    }
 
    else if ( $file_size > 200000) {
        $message = "La taille du fichier est superieure a 200 Ko";
        return $message;
    }
 
    else if ( $file_type == "text/plain" ) {
        $message = "Desolé un ne peu pas uploader de script" ;
        return $message;
    }
    else if ( ($file_type == "application/octet-stream") ||($file_type == "text/html") ) {
        $message = "Desolé un ne peu pas uploader de script" ;
        return $message;
    }
   
    $upload_denied_extentions = array( "exe", "pl", "php", "php3", "php4", "php5", "phps", "asp","cgi", "html", "htm", "dll", "bat", "cmd" );
      $extension = strtolower(substr(strrchr($file_url, "."), 1));
       foreach ($upload_denied_extentions AS $denied_extention) {
              if($denied_extention == $extension) {
                    $message = "Desolé un ne peu pas uploader de script" ;
                    return $message;
             }   
    }
   
   
    $result  =  move_uploaded_file($temp_name, $file_path);
    $message = ($result)?"Chemin a copier/coller <a href=$file_url>$file_url</a>" :
              "Probleme avec cet upload, dsl";
    return $message;
}


Sinon j'ai supprimé :
        $rep=dir(images);
        while($fichier = $rep->read())
         {
          if($fichier!="." && $fichier!="..")
           {
            ++$cpt;
           }
          }
        if ($cpt > 15) {
         $message = "Le quota de fichier total sur le serveur a été depassé cette semaine";
        }

et

        if (file_exists('images/'.$_FILES['userfile']['name'])) {
           $message = "Il ya deja un fichier avec ce nom";
        }

jeudi 15 décembre 2005 à 11:52:24 | Re : Securiser un upload !!

WhiteDwarf

Membre Club
Bah tout dépend de ce que les utilisateurs vont uploader...si c'est un des fichiers mp3, video, image, à ce moment là tu empêche l'upload d'autre fichiers...

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------

jeudi 15 décembre 2005 à 12:02:07 | Re : Securiser un upload !!

WhiteDwarf

Membre Club
Désolé pour le flood, mais y'a un problème : lorsque tu isole l'extention tu ne prends pas en compte le fait que dans le nom du fichier il puisse y avoir plusieurs "." donc si jamais j'upload un fichier qui se nomme : page.lol.html le fichier devrais passer...
donc je te conseille de faire plutôt comme ca :

$extention_var = explode('.', $file_url);
$extention _len = count($file_url);
$extention = $zone_explode[$extention _len-1];

$upload_denied_extentions = array( "exe", "pl", "php", "php3", "php4", "php5", "phps", "asp","cgi", "html", "htm", "dll", "bat", "cmd" );
     $extention_var = explode('.', $file_url);
     $extention _len = count($file_url);
     $extention = $zone_explode[$extention _len-1];       foreach ($upload_denied_extentions AS $denied_extention) {
              if($denied_extention == $extension) {
                    $message = "Desolé un ne peu pas uploader de script" ;
                    return $message;
             }   
    }

Voila, je ne suis pas sur du meilleur fonctionement de mon code, mais ca me semble plausible

Bon dev ++

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------

jeudi 15 décembre 2005 à 13:40:32 | Re : Securiser un upload !!

Anthomicro

Réponse acceptée !
Salut,

je pense résumer la situation ici : Sécuriser un upload en PHP

a +

    jeudi 15 décembre 2005 à 21:20:50 | Re : Securiser un upload !!

    SnOOpss

    J'ai refait des tests le fichier page.lol.html ne passe pas vu que le code prend uniquement la derniere extension.

    Sur ton site Anthomicro j'ai vu la methode infaillible (???) pour les images avec la commande getimagesize(). Je pense que je vait rajouter ca vu que ce sera en grande partie des images, mais si je voulait aussi permettre les .zip ???

    Sinon encore une question la commande
    getimagesize() n'est elle pas trop gourmande en ressource serveur ???


    jeudi 15 décembre 2005 à 22:35:56 | Re : Securiser un upload !!

    Anthomicro

    "Sinon encore une question la commande getimagesize() n'est elle pas trop gourmande en ressource serveur ???"

    J'ai pas fait de bench mais bon c'est sûr que c'est plus gourmand que de regarder le type mime envoyé.



      vendredi 16 décembre 2005 à 13:02:29 | Re : Securiser un upload !!

      SnOOpss

      En fait javais vu sur un site qu'il y avait moyen de gruger $_FILES['userfile']['type']; a condition d'avoir son propre serveur d'ou l'utilité de getimagesize() pour les images. En fait c'etait pour savoir si quelqu'un voyait une faille dans mon controle des extentions vu que je pense que ce sera le plus utile..
      vendredi 16 décembre 2005 à 23:00:36 | Re : Securiser un upload !!

      Anthomicro

      tu contrôles que les extensions et quelques types basiques, si j'étais toi je mettrais seulement les types mime autorisés, par contre regarde la source de coucou qui permet de justement faire passer un faux type mime (d'où l'utilisation du getimagesize() pour les images)

        samedi 17 décembre 2005 à 11:33:25 | Re : Securiser un upload !!

        SnOOpss

        C'est pour ca que je ne me fie pas au type mime, et que je compte surtout sur les extensions.
        Je vire egalement les espaces au cas ou la personne mette fichier.php .jpg.
        Et dans le cas present getimagesize() et fiable a 100/100 (je pense) pour les images mais si c'est un autre format de fichier je suis obligé de m'en remettre a mon controle d extensions.

        Je vais laisser trainer ce post 1 jour ou 2 des fois que quelqu'un voye une faille mais pour le moment je crois que je vais partir sur uploader uniquement les images pour le libre accés et sur enregistrement pour les format type *zip ou *.doc



        Cette discussion est classée dans : message, file, upload, name, files


        Répondre à ce message

        Sujets en rapport avec ce message

        move_uploaded_file [ par brok ] L'upload de fichier en php fonctionne tres bien avec la fonction: move_uploaded_file($HTTP_POST_FILES["name"]["tmp_name"],$newname);Par contre une foi Upload d'image par methode POST ... [ par psychoz ] J'en ai marre !Je cherche a envoyer une photo sur un site ...Je le faisait avec un client ftp, ensuite j'ai utilisé ftp et php ...Et maintenant je vou Pb upload [ par crecharlo ] salut, j'ai un probleme avec ma page d'upload: voici les erreurs: Warning: move_uploaded_file(/image/C:\Program Files\EasyPHP1-7\tmp\php2C.tmp.jpg) problème avec les if et les else... [ par sebmayer ] Bonjour,voila j'ai créé un petit programme pour uploader mes images, mais j'ai un petit problème avec mes vérifications de champs (les else et les if. files upload [ par Hades51 ] Bonjour,Est t'il possible de faire un multiplie file upload à partir d'un seul input type="file" ?Merci Modification d'un script d upload !!! [ par k4mik4zi ] bonjour j'ai un petit probleme, j'ai mon code source pour upload une image mais le probleme est que je n'arrive pas du tout a en faire quelque chose J Message d'erreur sur l'upload d'un fichier [ par WaNoU ThE EpSyLoN ] Bonjours tout le monde voilà je suis chez free comme hébergeur ( juste un précision on sait jamais) et j'essaie en ce moment de faire de l'upload de f upload image [ par mariobotta ] bonjour,j'ai créer un système d'upload pour des image stocker dans une base de donnée .mon script fonctionne bien en local mais plus sur le net (je su AIDEZ MOI PAR PITIÉ [ par Toolsweb ] Bon, j'ai ça  $taille_octets_max = 1048576; // Taille maxi du fichier, en octets.   if ($file_name == "none" || !$file_name)  {    $error="Sp&eacute;c upload images [ par refkaben ] Bonjour à tous,je veux uploade une image, j'ai fait des recherches sur phpcs et j'ai eu ce code que j'ai adapté à mon cas.le problème c'est que ça fon


        Nos sponsors


        Sondage...

        Comparez les prix

        CalendriCode

        Mai 2012
        LMMJVSD
         123456
        78910111213
        14151617181920
        21222324252627
        28293031   

        Consulter la suite du CalendriCode

        A découvrir



         
        Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
        CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
        CodeS-SourceS.com© est une marque déposée tous droits réservés

        Google Coop CodeS-SourceS Google Coop CodeS-SourceS
        Temps d'éxécution de la page : 1,139 sec (3)

        Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales