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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Upload un fichier - Script sécurisé ?


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Upload un fichier - Script sécurisé ?
    Bonjour,

    j'ai lu le tuto sur le site pour faire un système d'upload, mais je n'ai pas vraiment l'impression qu'il soit très sécurisé...
    Je trouve les vérifications très simple pouvez vous me dire ce que vous en pensez svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
    function upload($fichier, $destination, $maxsize=false, $extensions=false)
    {
    	//Test1: fichier correctement uploadé
    	if(!isset($_FILES[$fichier]) || $_FILES[$fichier]['error'] > 0) return false;
    	//Test2: taille limite 1mo = 1048576
    	if($maxsize !== false && $_FILES[$fichier]['size'] > $maxsize) return false;
    	//Test3: extension
    	$ext = strtolower(substr(strrchr($_FILES[$fichier]['name'], '.'), 1));
    	if($extensions !== false && !in_array($ext, $extensions)) return false;
    	//Déplacement
    	$nom = BASEPATH."/".$destination."/".sha1(uniqid(rand(), true)).".".$extension_upload;
    	return move_uploaded_file($_FILES[$fichier]['tmp_name'], $nom);
    }
     
    $upload1 = upload('fichier', 'images/upload', 1048576, array('png','gif','jpg','jpeg'));
    Je voudrais intégrer ce script sur une page accessible aux membres donc, je veux vraiment le sécurisé avant

    Cordialement,
    Cam022.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Il y a cette classe d'upload qui est plus sécurisée concernant le contrôle des images, elle gère beaucoup plus d'erreurs que cette fonction et possède de nombreuses options qu'il est facile de mettre en place en cas de besoin (redimensionnement, nommage et renommage de fichiers, upload multiple etc.).
    Il n'y aurait que 4 lignes à écrire pour la configurer dans ton cas.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pour protéger à coup sur un upload d'image il faut retraiter le fichier après l'upload avec GD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $img = imagecreatefrompng('justuploaded.png'); 
    imagepng($img, 'safe.png');
    Si le code précédent échoue : ce n'était pas une image => on supprimer le fichier potentiellement dangereux.

    Une protection par vérification d'extension est inefficace.
    Une protection via le type mime fourni par HTTP est contournable
    Une protection via le type mime retourné par fileinfo est un premier point intéressant

    un peu de lecture : https://www.owasp.org/index.php/Unre...ed_File_Upload
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Par contre je n'utilise pas seulement les images mais aussi les PDF, .doc, etc...

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Ben alors vérifie au moins l'extension. C'est le minimum.

    Un fichier malveillant dont on a changé l'extension est potentiellement dangereux mais normalement pas directement. Cela dit c'est une menace sérieuse.

    Si fileinfo fonctionne sur ton serveur, utilises cette fonction. C'est la méthode la plus aboutie actuellement disponible.

Discussions similaires

  1. [Upload] script pour uploader un fichier
    Par koKoTis dans le forum Langage
    Réponses: 2
    Dernier message: 12/02/2008, 09h31
  2. Réponses: 2
    Dernier message: 14/08/2007, 15h20
  3. exécution d'un script d'upload de fichier coté client
    Par cyril911 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 02/04/2007, 18h38
  4. [Upload] script d'upload de fichiers
    Par zais_ethael dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2006, 23h48
  5. [Upload] Upload de fichier avec un script PHP
    Par largolgd dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 15h21

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