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 :

Protéger l'accès à un fichier


Sujet :

Apache

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut Protéger l'accès à un fichier
    Bonjour,

    je voudrais protéger l'accès à un fichier, si j'ai bien compris, il faut faire un fichier htaccess, voici ce que j'ai mis dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Files monfichier.gml>
    order deny,allow
    deny from all
    allow from .monsite.fr
    </Files>
    mais du coup, il est interdit pour tout le monde, y compris pour le site qui doit y accéder pour créer une carte interactive.

    qu'est ce qu'il manque ?

    Merci,

    Nico

  2. #2
    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
    Par défaut
    En fait, le allow from s'applique au client du site : le navigateur. Allow from .monsite.fr signifie que seules les machines qui ont une IP associée au domaine .monsite.fr peuvent télécharger le fichier. Cela n'a rien à voir avec le site Web qu'on est en train de visiter.

    Pour ton problème, fais une recherche sur le forum sur le terme "hotlinking".

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    La configuration du fichier .htacess est décrit ici.
    Le principe est que dans ton fichier de configuration http.conf, tu definit le repertoire à gérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Directory /var/www/toto>
    Options Indexes Includes FollowSymlinks MultiViews
    AllowOverride AuthConfig  # Signifie qu'Apache doit prendre en 
                                       #compte ton fichier .htaccess placé dans le 
                                       #  repertoire toto
    Order allow,deny
    Allow from all              #tout le monde peut y acceder sous reserve de 
                                   #respecter les conditions que tu as défini dans le 
                                   #.htaccess
    </Directory>
    Puis dans le .htaccess, tu definis ces règles (par exemple, l'accès par mot de passe).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AuthUserFile /var/www/pass/.htpasswd
    AuthName "Accès protégé"
    AuthType Basic
     
    <Limit GET POST>
    Require valid-user
    </Limit>
    etc....
    tu trouveras un exemple à cette adresse : http://www.glatozen.org/apachehtaccess.php


    Bion courage

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    En fait, j'ai posté sur le forum apache, mais comment savoir si mon hébergeur utilise un serveur apache (et de toute façon, je n'ai pas accès au http.conf).

    j'ai essayé de mettre ça dans mon .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^.gml$   index.htm  [L]
    mais du coup, je ne peux plus accéder à mon site, j'ai une erreur 500 (internal server error) ...

    Nico

  5. #5
    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
    Par défaut
    Etrange comme erreur mais du coup, vu qu'il y a erreur, cela veut dire que le serveur prend en compte ton .htaccess donc est un serveur Apache. Le moyen le plus simple de savoir si les .htaccess fonctionnent c'est de mettre juste ceci dans un .htaccess :
    et si avec ça l'accès au répertoire est refusé, c'est un Apache qui reconnaît les .htaccess.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    effectivement, si je met deny from all, je n'ai plus accès au répertoire, mais si je met les instructions rewriterule, j'ai toujours erreur 500.

    pour info, le site est hébergé chez online.net, si ça peut servir ...

    Nico

  7. #7
    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
    Par défaut
    Tu as une erreur 500 pour toutes les pages ou une URL bien précise ? Quel est le contenu de ton .htaccess ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    Je met mon fichier gml dans un répertoire data de mon site où je stocke des fichiers, par exemple, j'ai aussi dans ce répertoire des fichiers pdf dont j'autorise le téléchargement.

    si je met le .htaccess dans ce répertoire, j'ai aussi une erreur 500 lorsque je veux accéder aux fichiers pdf.
    sinon, les pages qui n'ont pas besoin d'accéder au répertoire data fonctionnent normalement.

    Dans mon .htaccess, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^.gml$   index.htm  [L]
    Nico

  9. #9
    Membre expérimenté

    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
    Par défaut
    A défaut d'erreur de syntaxe, vous essayez d'utiliser une directive qui n'est pas disponible ou qui vous est interdite (réglé au niveau du serveur par votre prestataire via AllowOverride).

    Essayez sans cette ligne également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Options +FollowSymLinks
    Elle est peut être déjà active au niveau du fichier de configuration d'Apache et celui-ci ne vous autorise peut être pas à la redéfinir.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    Effectivement, comme expliqué ici, online ne supporte pas la commande Option.

    voici donc mon .htaccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AddType application/x-httpd-php5 .php
    RewriteEngine on
    RewriteRule   monfichier.gml   index.htm  [L]
    donc maintenant, j'arrive à accéder à mes fichiers pdf, si je tape l'url complète de monfichier.gml, ça me renvoie un message comme quoi je n'ai pas accès au fichier, mais quand je charge la page où j'ai la carte interactive qui doit accéder au fichier gml, la page s'affiche sans message d'erreur, sauf que les données ne s'affichent pas sur la carte.
    si je retire le fichier .htaccess, tout s'affiche normalement, donc le problème vient bien du .htaccess.

    question : à quoi correspond l'option [L] dans la ligne RewriteRule ?
    J'ai vu une commande rewritecond, à quoi ça sert?, est-ce que je devrais creuser de ce côté ?

    Nico

  11. #11
    Membre expérimenté

    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
    Par défaut
    Hum, les explications sont loin d'être claires pour nous : il faudrait nous donner plus de détails (URLs des différents intervenants, résultats obtenus - erreurs HTTP précises y compris, liens entre les différents éléments, fichiers .htaccess en intégralité, ...).

    Mais quel est le lien d'ailleurs entre une simple règle de réécriture et la demande initiale ? (Là, si un client demande monfichier.gml - même indirectement car lié, vous lui servez la page index.htm donc, a priori, normal qu'il n'y ait pas d'affichage si c'est le client qui devait accéder au fichier gml pour le gérer ensuite. On en reviendrait donc au hotlinking comme l'a indiqué _Mac_ ?).

    Citation Envoyé par DiverSIG Voir le message
    question : à quoi correspond l'option [L] dans la ligne RewriteRule ?
    J'ai vu une commande rewritecond, à quoi ça sert?, est-ce que je devrais creuser de ce côté ?
    Tout est détaillé dans la documentation mais le flag [L] c'est pour stopper la lecture des règles de réécriture si celle qui correspond est ainsi marquée (sinon Apache continue à les lire et traiter). RewriteCond permet de définir des conditions "poussées" sur une règle de réécriture (par exemple tester toute autre partie que le chemin de l'URL - ce que ne permet qu'un RewriteRule - : nom de domaine, query string, protocole, etc ; les entêtes ; les variables d'environnement ; date/heure ; ...).

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    j'ai mis ça dans mon .htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_REFERER} !^$
        RewriteCond %{HTTP_REFERER} !^http://(www\.)?monsite\.fr/.*$ [NC]
        RewriteRule .*\.(gml)$ - [F,NC] # Vous pouvez remplacer F par R=403
    </IfModule>
    et mis le .htaccess dans le répertoire où se trouvent les fichiers que je veux interdire.

    Mais j'ai toujours accès à mon fichier gml quand je tape son url ...

    qu'est-ce qu'il manque ? ou alors ne serait-ce pas l'hébergeur online qui ne fait pas comme tout le monde une fois de plus ?
    Nico

  13. #13
    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
    Par défaut
    Il ne faut pas taper directement l'URL du fichier avec ce .htaccess : les règles font que le fichier est interdit uniquement s'il y a un referrer et que celui-ci n'est pas ton site. Si tu tapes directement l'URL du fichier sans cliquer sur un lien, il n'y a pas de referrer et le fichier est renvoyé. Commente le premier RewriteCond si tu veux que le fichier ne soit accessible seulement depuis un clic sur une des pages de ton site.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut
    ça marche, mais pas la première fois, je m'explique :
    quand j'arrive sur la page, si je tape l'adresse directe du fichier à cacher, ça m'affiche le fichier, si je fait rafraichir la page, alors là j'ai une page erreur 403.

    est-ce que ça viendrait pas d'un problème d'initialisation de la variable HTTP_REFERRER, ou quelque chose comme ça ?
    et si c'est ça, comment l'initialiser ?

    Nico

  15. #15
    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
    Par défaut
    Oui, je pense que c'est un problème de referrer mais malheureusement tu n'as pas la main dessus, c'est le navigateur qui décide tout seul de la valeur à lui donner et quand l'envoyer.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut la même demande initiale..
    Bonjour,

    je réouvre ce post car j'ai la même demande que celle initialement exprimée par Nico, à savoir :
    interdire l'accès à un fichier en particulier, pour tous sauf pour les machines associées à un domaine précis.
    Je souhaiterais utiliser le "allow from" qui semble être fait pour ça.
    Mais j'obtiens un "403 Forbidden" lorsque je lance des requêtes Ajax (Post) vers "monfichier.php" à partir d'une page hébergée sur le serveur associé au domaine ".mondomaine.fr"

    J'ai mis ceci dans mon htaccess:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Files monfichier.php>
    order deny,allow
    deny from all
    allow from .mondomaine.fr
    </Files>
    J'ai vu dans la doc Apache2.0 qu'il n'y avait pas de point devant le domaine. J'ai essayé mais ça ne change rien.
    Pour le contexte :
    - monfichier.php est sur un mutualisé chez OVH
    - le htaccess fonctionne correctement pour d'autres directives telles "AuthUserFile" etc...

    Y aurait-il qqn pour m'éclairer ?

    merci d'avance
    Luc

  17. #17
    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
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    En fait, le allow from s'applique au client du site : le navigateur. Allow from .monsite.fr signifie que seules les machines qui ont une IP associée au domaine .monsite.fr peuvent télécharger le fichier. Cela n'a rien à voir avec le site Web qu'on est en train de visiter.

    Pour ton problème, fais une recherche sur le forum sur le terme "hotlinking".
    + http://apache.developpez.com/faq/?pa...ages_exterieur

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    Oui, scuzi Mac,

    je me connecte à l'instant sur le forum car je viens de comprendre à retardement votre premier message que j'avais pourtant bien lu hier...

    Donc aucune protection réellement fiable pour ce contexte ? (le referer semble léger apparemment).


    Luc

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    re..

    bon suis parti sur un autre moyen de protection.

    merci de votre réponse
    Luc

Discussions similaires

  1. [JSF 2] Protéger l'accès à un fichier XHTML
    Par facilus68 dans le forum JSF
    Réponses: 33
    Dernier message: 24/02/2015, 15h48
  2. [2.x] Protéger l'accès à des fichiers uploadés
    Par dnd888 dans le forum Symfony
    Réponses: 4
    Dernier message: 24/12/2012, 18h03
  3. 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
  4. Réponses: 4
    Dernier message: 04/03/2010, 15h12
  5. Réponses: 2
    Dernier message: 25/02/2007, 13h50

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