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 :

[Sécurité] Site sécurisé par php : protéger fichier accès directe


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [Sécurité] Site sécurisé par php : protéger fichier accès directe
    Bonjour,


    Alors voici mon problème. J'ai un site protégé par login php et session. Une fois le visiteur rentré, il put accèder à tout : naviguer de fichier php en fichier php ou bien télécharger des fichiers pdf situé dans un autre repertoire.

    Cependant je me suis rendu compte qu'en entrant l'adresse directe du fichier pdf : http://monsite.com/Marketing/fichierpdf.pdf, n'importe qui pouvait le télécharger.

    Comment faire pour rendre l'accès directe à mes fichiers impossible ?

    Merci de votre aide.

    PS : je ne souhaite pas utiliser de .htaccess pour le controle d'utilisateur mais bien php/session.

    PS2 : j'ai essayé de mettre un .htaccess avec un "deny all" dans le repertoire des pdf, mais celui ci bloque également le téléchargement par les utilisateurs authentifiés !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Ne donner les droits de lecture/ecriture qu'à l'utilisateur qui est associé à ton serveur web (apache, nobody, ...) pour ton répertoire contenant les pdf.
    chown + chmod sous Linux.

    Puis créer une page php qui ira lire le fichier dans le répertoire pour le restituer.

    Tu pourras dans cette page vérifier que l'utilisateur est authentifié,
    vérifier l'existance du fichier et le renvoyer à l'utilisateur en réécrivant les entetes.
    ça pourrait donner quelque chose comme ça (je ne te certifie pas que le code fonctionne mais ça te donne une base pour démarrer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //tu effaces le buffer
    ob_clean();
    //Tu réécris les entetes pour indiquer au navigateur le type de fichier
    header("content-type: application/pdf");
    //tu indiques le nom du fichier que le navigateur va afficher
    header("Content-Disposition: filename=\"$nom_du_fichier\"");
    //tu renvoies les donnees vers le navigateur
    flush(); 
    // tu lis le fichier
    readfile("$chemin_acces_au_fichier");
    Ce code ne traite que de l'envoi du fichier et non pas toute la partie vérif' du user/vérif du fichier, etc.

    Mais attention : bien vérifier les paramètres d'appel à une telle page comme par exemple par identifiant de fichier à partir d'une base de donnée ou du nom réel du fichier
    Ceci afin d'éviter que des personnes mal intentionnées n'accèdent pas à d'autres répertoires (ex. /etc/passwd, etc.)
    A toi de bien sécuriser ton script.

    Tom
    a+

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Tout à fait d'accord avec la solution de Tom_92.
    Quelques précisions : je te conseille de stocker le chemin, le nom du fichier, sa description éventuelle et sa taille en bdd. Ensuite, tu appelles le script de téléchargement avec en paramètre uniquement l'id numérique du fichier. Cela rend le contrôle de la validité du fichier beaucoup plus simple (pour en effet ne pas accéder à un répertoire non autorisé).

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu pourrais également utiliser un fichier .htaccess, non pour le contrôle de sessions, mais bien pour protéger ton répertoire contre les accès HTTP directs à tes fichiers :
    Ensuite, tu utilises le même style de fichier qu'indiqué ci-dessus (attention à ne pas le mettre dans un répertoire protégé par .htaccess) pour identifir ton user, vérifier que le fichier à télécharger existe puis l'envoyer au navigateur.

    Bien entendu, tu peux combiner ces deux techniques, même si cela n'aurait pas un intérêt exceptionnel.

  5. #5
    HwRZxLc4
    Invité(e)
    Par défaut
    Le problème, si je peux me permètre c'est que le non d'utilisateur et le mot de pass, passe en claire a l'identification et sa ètre obtenu avec ethereal, si tu as un scanne juste avant de taper ton user et ton passwd, a la reconstitution tu as ton user et pass en claire...

    J'ai vu sa au cour sécurié linux.

  6. #6
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    ou alors tu utilise un httpwd pour demander a tes utilisateur de se reidentifié pour acceder au fichiers.
    manganimes (en construction) -
    zemanga

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Pour que les mots de passe ne circule pas en clair => SSL

    Après il faut connaitre le degré de sécurité que tu veux appliquer à tes fichiers.

    Ethereal = scanne dans un réseau fermé.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    On peut aussi hascher les login et mdp par md5 avant transfert, ce qui donne une excellente sécurité (notamment si on utilise un système de jeton avec grain de sel), sans être obligé de passer par SSL (indisponible chez la plupart des hébergeurs gratuits).

Discussions similaires

  1. Protéger l'accès direct à un fichier web
    Par tidus_6_9_2 dans le forum 4D
    Réponses: 6
    Dernier message: 31/05/2012, 14h40
  2. Protéger ses scripts PHP contre un accès direct
    Par PeekNPoke dans le forum Apache
    Réponses: 2
    Dernier message: 29/06/2009, 11h15
  3. Ouvrir site web par système de fichier
    Par jowsuket dans le forum Visual Studio
    Réponses: 5
    Dernier message: 13/08/2008, 17h40
  4. [FTP] Rechercher des fichiers dans un site FTP par PHP
    Par jack_1981 dans le forum Langage
    Réponses: 31
    Dernier message: 03/08/2006, 13h37

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