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é] limiter accès à un fichier (pas htaccess)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut [Sécurité] limiter accès à un fichier (pas htaccess)
    Bonjour,

    J'ai développé un petit intranet pour la boite dans laquelle je bosse, mais j'aimerai offrir aux utilisateurs la possibilité de poster des fichiers avec accès sécurisé, cad l'obligation de saisir un log/pass (mais sans ouvrir de session) pour accéder à un fichier. htaccess ne correspond pas tout à fait à ce que je veux faire dans la mesure où ce système n'est pas des plus souples dans la gestion des log/pass, répertoires/sousrépertoires...

    Actuellement lorsqu'un fichier est protégé, un pop up html s'ouvre pour demander les paramètres et affiche (ou non ) l'accès au fichier. Le nom du fichier est généré aléatoirement sur 30 caractères. Le problème est que même avec un nom aléatoire, mes fichiers restent accessibles directement.

    En fait, je voudrais que les fichiers qui ne sont pas du html ou du php ne puissent s'ouvrir qu'avec le fichier de script "ouverture.php" (par exemple).

    Quelqu'un aurait-il une idée?

    Merci

    @ modérateur : si je suis hors sujet, n'hésitez pas à déplacer mon post dans le bon forum... Perso je savais pas trop dans lequel poster donc...

  2. #2
    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
    Par défaut
    Salut

    Le souci qui se pose si tu ne souhaites pas utiliser de protection par .htaccess est que tes fichiers seront forcément accessibles, dans l'absolu, si ton utilisateur découvre leur URL permanente.

    Cela dit, tu pourrais les stocker dans ta BDD (plutôt qu'en temps que fichiers indépendants) dans une table contenant au moins un id, le type MIME de ton fichier et un champ BLOB pour le contenu. C'est très gourmand en mémoire mais le BLOB est là pour cela.

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    a priori il faut un .htaccess laissant l'acces a localhost seulement...
    voire aucun acces si tu charges tes fichiers par un autre moyen et que tu le peux

    et ensuite tu peux faire ta gestion perso et envoyer le contenu du fichier avec readfile
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    @ kirkis : ok, j'ai été un peu vite en besogne en disant que je ne voulais pas de htaccess. Disons que l'emploi de htaccess de façon classique avec :

    require valid user

    n'est pas une solution adaptée à ce que je veux faire.

    Maintenant l'utilisation d'un htaccess global est tout à fait envisageable.

    @ gorgonite : l'accès au fichier en localhost via htaccess permet-il aux utilisateurs locaux d'accéder à tous les fichiers ?

    en tous cas merci de votre aide...

  5. #5
    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
    Par défaut
    En ce cas, utilise plutôt un .htaccess de type :
    (Je croyais que c'était ça la forme classique, d'ailleurs)
    Puis tu suis la méthode proposée par gorgonite.

    C'est au contraire très flexible, il suffit de bien l'utiliser ^^

  6. #6
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    je précise aussi que forcer le téléchargement du fichier est tout à fait envisageable.

    donc si j'ai bien compris, je mets un deny from all (ou localhost?) sur tous mes fichiers (protégés ou pas) qui va me permettre via un script de lire le fichier et de balancer le contenu à l'utilisateur, c'est ça?

  7. #7
    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
    Par défaut
    L'idée est de refuser toutes les requêtes HTTP à tout ce que contient ton répertoire (y compris ses sous répertoires).
    Ainsi, le seul moyen d'accéder à ces fichiers est de demander à PHP de les lire et de les envoyer au client.

    Tu peux passer par une table de ta BDD pour ne transmettre que des identifiants dans tes liens (+ sécurisé, + pratique) ou bien transmettre le chemin réel (+ lisible) à ton script de lecture.

    Concernant les exceptions de ton fichier .htaccess, je te recommande la doc d'Apache [httpd.apache.org] et le forum Apache [developpez.com].

  8. #8
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    Après lecture de vos réponses pour lesquelles je vous remercie, je coirs que je tiens ma solution dont je vous fais part ici pour ceux que ça pourrait aider :

    je mets un deny from all sur tous les fichiers postés protégés. Ainsi aucun problème d'accès direct.

    Pour la lecture, je passe par un fichier php d'autentification.

    Si l'autentification est ok :
    avec le script, j'ouvre le fichier,
    je le lis et
    je le copie dans un répertoire temporaire (généré dynamiquement et aléatoirement).

    Je balance cette copie à l'utilisateur et une fois qu'il est ouvert,

    je supprime le fichier temporaire.

    Alors certes ça donne accès au fichier de façon hyper brève à tous les utilisateurs, mais les noms de répertoires aléatoires + nom de fichier aléatoires, + accès très limité en temps puisque supprimé juste après = faudrait que j'ai vraiment pas de bol pour me faire hacker mes fichiers...

  9. #9
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    @ kirkis : je reste quand même dubitatif quand au stockage des fichiers dans un BDD du fait de la place que ça prend... c'est pour cela que je n'inclue pas ce procédé dans la solution que je propose. Maintenant c'est simplement ma façon de voir et je ne dis pas que la tienne n'est pas bonne !

  10. #10
    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
    Par défaut
    Citation Envoyé par grinder59
    @ kirkis : je reste quand même dubitatif quand au stockage des fichiers dans un BDD du fait de la place que ça prend... c'est pour cela que je n'inclue pas ce procédé dans la solution que je propose. Maintenant c'est simplement ma façon de voir et je ne dis pas que la tienne n'est pas bonne !
    Moi, je le dis
    Je l'ai simplement proposé car tu disais d'emblée que tu voulais éviter .htaccess...
    En clair : évitez de stocker des fichiers dans la BDD !


    [Edit] Pourquoi copier le fichier ? Tu peux l'envoyer directement au navigateur, ainsi tu n'auras pas de souci de noms identiques, pas de souci de manque d'espace disque, pas de perte inutile de temps processeur, pas de faille de sécurité...

  11. #11
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    heu... en fait après réflexion, y'a un truc que je ne sais pas faire... c'est justement l' "envoyer" au navigateur.

    je fais un $buffer = fread(...) de mon fichier (ouvert avec fopen).

    en suite, je fais un simple echo $buffer; ? ça suffit ?

  12. #12
    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
    Par défaut
    Non, cela ne suffit pas, il te faut aussi utiliser la fonction header() avec les bons paramètres, notamment Content-Type et Content-Disposition.

  13. #13
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    Vi de la façon suivante, ça tourne...

    header("Content-type: application/force-download");
    header("Content-Disposition: attachment; filename=".$nomdufichier);
    readfile($chemindufichier.$nomdufichier);

    En tous cas, merci à tous...

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

Discussions similaires

  1. probleme limitation accès
    Par gaoula73 dans le forum Modélisation
    Réponses: 2
    Dernier message: 28/05/2008, 13h25
  2. Limiter acces à un fichier via .htaccess
    Par Evadb dans le forum Apache
    Réponses: 2
    Dernier message: 25/05/2007, 10h50
  3. limitation accès simultanés SQL Serveur
    Par cbleas dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2006, 10h27
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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