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

Apache Discussion :

[Htaccess] Comment interdire l'accès à certains fichiers ?


Sujet :

Apache

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut [Htaccess] Comment interdire l'accès à certains fichiers ?
    Bonjour

    J'essaye d'empêcher l'accès à certains fichiers (les fichiers excel, par exemple) d'un répertoire, j'ai donc créé un fichier .htaccess mais ça n'empêche rien. Quelqu'un pourrait-il me le corriger ? Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Voici le fichier en question :
    <Files *.xls>
    Order Deny, Allow
    Deny all
    </Files>
    D'ailleurs, peut-on faire en sorte que seuls les fichiers .php et .htm* soient autorisés ? (je ne connais pas du tout les regex d'apache).

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    La directive Files, de base (utilisation que vous en faites), ne fait pas de "pattern matching". Vous devez rajouter un tilde pour l'indiquer voir faire plus simple en vous tournant vers la directive FilesMatch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Files ~ "\.xls$">
        Order Deny,Allow
        Deny from all
    </Files>
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <FilesMatch "\.xls$">
        Order Deny,Allow
        Deny from all
    </FilesMatch>
    Documentation :

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci beaucoup, mais ça ne fonctionne pas même après avoir redémarré le serveur. Y a-t-il un module particulier à lancer dans le httpd.conf ?

    J'ai dans mon httpd.conf une directive similaire (standatd) qui empêche de lire les fichiers .ht* et qui fonctionne parfaitement.

    Mon problème serait-il lié au fait que les fichiers xls sont ouverts par IE par l'intermédiaire du plugin excel ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par guidav
    Merci beaucoup, mais ça ne fonctionne pas même après avoir redémarré le serveur. Y a-t-il un module particulier à lancer dans le httpd.conf ?
    Non elles font partie du core. Vous devriez corriger les erreurs de syntaxe que j'avais recopié () puis vérifier votre journal d'erreur qui doit en indiquer la cause.

    A noter que pour être autorisé à utiliser ces directives dans un fichier htaccess, AllowOverride doit au moins avoir la valeur Limit pour le répertoire concerné.

  5. #5
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Ca doit venir de la directive AllowOverride, elle était à None pour tout.
    Par contre, si je change sa valeur, j'ai systématiquement une erreur 500, mais je vais creuser.

  6. #6
    Membre régulier Avatar de loopback
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par guidav Voir le message
    Ca doit venir de la directive AllowOverride, elle était à None pour tout.
    Par contre, si je change sa valeur, j'ai systématiquement une erreur 500, mais je vais creuser.
    essai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		<FilesMatch "\.(xls)$">
    				Order allow,deny
    				Deny from all
    			</FilesMatch>

  7. #7
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci, mais ça ne change rien. Comme le dit julp, ça doit venir de la directive AllowOverride, mais je n'ai pas encore trouvé.

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Que y a-t-il dans les logs d'erreur d'Apache et quelle syntaxe exactement utilises-tu dans tes .htaccess ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Mon .htaccess est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <FilesMatch "\.(xls)$">
        Order Allow, Deny
        Deny from all
    </FilesMatch>
    et mon error.log donne quelquechose du genre :
    [Tue Oct 02 16:37:23 2007] [error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined index: yyy in D:\\Donnees intranet\\02-Sites intranet\\xxx.php on line 500, referer: http://xxx/xxx.php

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par guidav Voir le message
    et mon error.log donne quelquechose du genre :
    [Tue Oct 02 16:37:23 2007] [error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined index: yyy in D:\\Donnees intranet\\02-Sites intranet\\xxx.php on line 500, referer: http://xxx/xxx.php
    Ben c'est une erreur PHP que tu rencontres : le script xxx.php se trouve être appelé et ce script cherche l'index yyy dans un tableau ($tableau['yyy']) à la ligne 500, et il se trouve que cette entrée n'existe pas...

    Quant à savoir si c'est normal que xxx.php soit appelé, j'en sais rien, c'est pas lié au paramétrage <FilesMatch>.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Oups, je suis un boulet, j'ai pas mis la bonne ligne d'erreur (j'ai juste fait un search sur "500" dans le log...)

    La ligne d'erreur devrait plutôt être celle-ci, mais je n'y connais rien:
    [Fri Sep 28 16:15:09 2007] [alert] [client 1.205.5.122] D:/xxx/.htaccess: order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Vous avez du laisser les espaces avant ou après la virgule au niveau de deny/allow à la ligne du Order alors qu'il n'en faut pas.

  13. #13
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci julp, c'était exactement ça. Apache n'est pas très compréhensif avec les débutants.

    EDIT : je me disais bien que ça ne pouvait pas être aussi simple, maintenant je n'ai plus accès à mes fichiers excel avec le code suivant qui devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chemin = 'http://xxx/'.$filename;
     header("Content-type: application/force-download"); 
     header("Content-Disposition: attachment; filename=$filename"); 
     readfile("$chemin");
    Je croyais que readfile pasasit outre les restrictions des .htaccess ? C'est à cause du force-download que ça ne marche pas ?

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Si vous passez par une URL HTTP il est normal qu'Apache en tienne compte. Bien qu'on puisse gérer ce cas à l'aide d'une règle Allow, je vous recommande d'utiliser directement un chemin local (ie /ma/racine/web/répertoire1/répertoire2/monfichier.xsl).

  15. #15
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci encore julp, j'ai modifié
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo file_get_contents($filename);
    et ça marche bien. Apparemment, readfile() passe directement par apache et se heurte au .htaccess

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

Discussions similaires

  1. Interdire l'accès aux fichiers dans certains cas
    Par ant0inep dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2010, 16h04
  2. Réponses: 3
    Dernier message: 06/09/2010, 13h46
  3. Réponses: 4
    Dernier message: 04/11/2009, 22h40
  4. comment interdire l'accés à mon systéme Win 98
    Par ghita269 dans le forum Windows 2000/Me/98/95
    Réponses: 15
    Dernier message: 20/10/2007, 23h34
  5. [VBA-E] (débutante) comment interdire l'accès à une plage?
    Par aniu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/02/2006, 11h45

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