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 :

Upload Fichiers sensibles Formulaire --> Sécurité --> 777 et .htaccess


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Upload Fichiers sensibles Formulaire --> Sécurité --> 777 et .htaccess
    Bonjour à tous bande de fous, (développeur, un métier beaucoup trop casse tête !!)

    Je suis actuellement en train de gérer des fichiers assez importants, qui pourront être uploadés par l'administrateur sur le site, et consultables/téléchargeables par les clients via un gestionnaire de fichier. Chaque client a accès à seulement un dossier.

    Je viens m'adresser à vous car après moultes recherches (ah oui oui, moultes !) , je ne trouve vraiment aucune réponses (ça fait un moi que je suis sur se site, il m'ait arrivé beaucoup de problème, ai j'ai réussit par les résoudre sans aide, croyez-moi, pour celui-ci aussi j'ai bien cherché ! mais sans résultats concrets).

    Je vous explique mon problème : Les dossiers des clients sont protégés par un .htaccess contenant "deny from all" (ainsi que des lignes qui me sont inconnues, trouvées sur le web, pour bloquer les scripts php ou autres), permettant la consultation des dossiers uniquement depuis le site web.

    L'administrateur se connecte et peut alors uploader les fichiers dans les dossiers voulu, mais le code PHP s'exécute seulement si mon dossier est en écriture publique (777 ou 775 par exemple). Le problème est avant tout la sécurité, si mon dossier est en 777, tout marche correctement.



    Arborescence :
    |_DossierSiteWeb
    _|_ masterFolder
    ___|_premierClientFolder
    _____|_fichierUploade.pdf
    _|_.htaccess (dans masterFolder, oui).

    Lignes Fichiers .htaccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Order Deny,Allow
    deny from all
    php_flag engine off
     
    AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
    Options -ExecCGI
     
    <Limit PUT DELETE>
    order deny,allow
    deny from all
    </Limit>


    Mon code PHP :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    if(isset($_SESSION['admin']) && !isset($_SESSION['user']))
    {
     
    if(isset($_POST['path']))                                /* $_POST['path'] = "masterFolder/premierClientFolder" */
    {
     
     
     
    $storeFolder = "gestionnaireFolder/" . $_POST['path'];
     
    if (!empty($_FILES)) {
     
        $tempFile = $_FILES['file']['tmp_name'];                    
     
        $targetPath = dirname( __FILE__ ) . "/". $storeFolder . "/";  
     
        $targetFile =  $targetPath. $_FILES['file']['name'];  
     
     
     
        move_uploaded_file($tempFile,$targetFile); 
     
     
     }
     
    }
     
    }

    J'ai essayé beaucoup de solution, la dernière avant d'écrire ses lignes a été d'essayer chown avant ET après le move_upload, sans résultat..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        chown($targetPath, 777);
     
        move_uploaded_file($tempFile,$targetFile); 
     
        chown($targetPath, 700);
    J'ai aussi essayé la fonction ftp_put, mais je n'ai pas réussit à la faire marcher avec un formulaire (impossible, non?).


    Si je comprends bien, le fichiers .htaccess permet de bloquer les actions sur les dossiers/fichiers tant que ceci n'est pas effectué depuis les scripts php interprétés par le serveur.

    J'ai aussi essayé de faire en sorte qu'à la connexion, l'administrateur ai les droits Administrateur sur le FTP pour pouvoir uploader en Admin, j'ai aussi essayer avec les permissions de groupe, mais ça ne change rien, je ne comprends absolument pas comment marche le système de droits (sur FTP) en PHP.

    Ce que je voulais savoir :

    Est-ce possible qu'un "hackeur" introduise des fichiers sur mon FTP sans utiliser mon site web ?
    Est-ce que le fichier .htaccess bloque VRAIMENT toutes actions sur les dossiers ciblés sans utiliser mon site web?
    Si le système d'upload via un formulaire est-il donc la bonne solution pour garder mon dossier sécurisé ?
    Est-il possible de faire en sorte que le Fichier uploadé soit bougé par le script sans que le dossier de réception soit en exécution publique? (profiter de la permission groupe ou admin?)

    (si possible) Les lignes en plus de "deny from all" dans mon .htaccess permettent-elles de bloquer l'exécution de scripts (indésirable!) ?

    Merci de m'avoir lu, en espérant avoir des réponses positives !

    B0unti.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    En vrac et en vitesse:

    / Est-ce possible qu'un "hackeur" introduise des fichiers sur mon FTP sans utiliser mon site web ?

    Il y a 4 méthodes possible pour un hackeur pour mettre un fichier sur le site :
    - via un formulaire d'upload peu sécurisé (accessible au public, peu sécurisé au niveau des fichiers envoyés, et qui place le fichier uploadé dans un dossier accessible par le web)
    - via la base de donnée (injection sql puis select xxx into outfile )
    - par ftp ou par ssh, mais ca implique de s'être fait voler le mot de passe

    * Est-ce que le fichier .htaccess bloque VRAIMENT toutes actions sur les dossiers ciblés sans utiliser mon site web?

    Le deny from all dans un .htaccess c'est assez efficace. Ca dit en gros au serveur web "personne ne peut toucher à ca". Dans ton .htaccess il n'y a pas de Allow ... qui donne des permissions donc c'est bon. A la rigieur le bloc <limit> n'est pas utile.

    Si tu veux être tranquille (et si c'est possible), met ton dossier à proteger en dehors de ton dossier racine. Dans ton cas, masterFolder ne doit pas être dans DossierSiteWeb.

    * Si le système d'upload via un formulaire est-il donc la bonne solution pour garder mon dossier sécurisé ?

    Oui, à partir du moment où l'accès à celui ci est bien protégé

    * Est-il possible de faire en sorte que le Fichier uploadé soit bougé par le script sans que le dossier de réception soit en exécution publique? (profiter de la permission groupe ou admin?)

    C'est possible, mais le mieux c'est de le laisser là où il est, et de passer par un script qui va lire le fichier et l'envoyer au client. En gros (non testé mais ca doit pas être loin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
      // code pour choisir le bon fichier + verifier que l'utilisateur qui demande le fichier a bien le droit de le faire + ...
      header('Content-Type: application/pdf'); // en fonction du fichier
      readfile('/chemin_abolsu_vers_le_fichier/fichier.ext');
    * Les lignes en plus de "deny from all" dans mon .htaccess permettent-elles de bloquer l'exécution de scripts (indésirable!) ?

    Le deny from all bloque déjà l'accès donc ...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    @scvo.One Merci beaucoup ce que tu viens de me dire m'aide vraiment ! Je vais faire en sorte de bien protéger mon fichier php d'upload !

    Je met le post en Résolu, merci de ta réactivité en tout ca ! +1 !

  4. #4
    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
    Salut,

    Ton résolu n'a pas fonctionné

    Pas grand chose à rajouter. Comme l'a dit scvo.0ne peu importe que tu mettes les droits suffisants pour pouvoir uploader des fichiers dans ce dossier à partir du moment où tu protège le script php d'upload. Et si seul l'administrateur est autorisé, il suffit d'appliquer la même protection pour l'administrateur et le script d'upload. Généralement cela se fait par une variable de session. Et la meilleure protection est d'utiliser conjointement une liaison sécurisée https pour protéger les identifiants de session. Ensuite avec un .htaccess et le deny from all seul php pourra lire le fichier ou proposer le téléchargement du contenu. Les accès externes depuis une URL seront rejetés.
    Au passage si tu veux un script d'upload avec beaucoup de fonctionnalités/possibilités tu peux regarder ici.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Salut,
    Salut !

    Citation Envoyé par ABCIWEB Voir le message
    Ton résolu n'a pas fonctionné
    Oui désolé hier je ne l'ai pas trouvé sur mon Smartphone !

    Citation Envoyé par ABCIWEB Voir le message

    Pas grand chose à rajouter. /.../ Au passage si tu veux un script d'upload avec beaucoup de fonctionnalités/possibilités tu peux regarder ici.
    Merci bien, je vais me servir de tout ça pour faire des trucs joli en jaja Puis bon, mon commentaire est inutile, mais tu as pris la peine de me répondre, alors moi aussi ^^' Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. upload fichier sans formulaire
    Par nine dans le forum Langage
    Réponses: 13
    Dernier message: 19/05/2009, 04h06
  2. Erreur upload fichier via formulaire
    Par Telecaster dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 12h30
  3. Pb Upload fichier sans formulaire
    Par fabred dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 08/09/2008, 16h54
  4. uploader fichier + variables formulaires par POST
    Par Petite_Escalope dans le forum C#
    Réponses: 1
    Dernier message: 28/10/2007, 21h03
  5. [Web] Upload fichier via formulaire HTTP
    Par nik00s dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/08/2005, 13h27

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