Interdire l'acces à un répertoire mais l'autoriser via php

Discussion dans 'URL Rewriting et .htaccess' créé par fweens, 2 Avril 2007.

  1. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    Bonjour,

    Tout d'abord, pour mon premier message je voulais dire que ce site est très intéressant! Merci à tous ;-)

    Je me pose une question et j'ai pas trouvé la réponse:
    Je veux protéger un répertoire. En gros si avec un navigateur on tape:
    http://monsite.com/rep ou http://monsite.com/rep/3.gif alors je veux que le navigateur ne liste pas le répertoire ou n'affiche pas l'image.

    Par contre je veux pouvoir accéder avec un fichier php (automatiquement sans que l'utilisateur doivent s'authentifier) au contenu de ce répertoire.

    J'ai essayé avec un .htaccess et .password mais cela ne marche que si à travers le navigateur je me suis authentifié avant...

    Avez-vous SVP des idées??

    Help,
    Franck
     
  2. honolulu
    honolulu WRInaute impliqué
    Inscrit:
    8 Novembre 2005
    Messages:
    746
    J'aime reçus:
    0
    salut,

    pour le "non listage", il suffit de mettre un fichier index.html ou index.php dedans :wink:
    pour le reste, je ne vois pas trop et je passe la main..
     
  3. Ankyo-SG
    Ankyo-SG WRInaute discret
    Inscrit:
    12 Mars 2007
    Messages:
    106
    J'aime reçus:
    0
    Salut,
    Si j’ai bien compris tu veux interdire accès à ton répertoire via le http, dans ce cas la tu peux interdire le listage de répertoire en mettant ce code htaccess dans le répertoire concerné

    Code:
    #--------------------------------------------------
    # Interdiction de listage de repertoire
    #--------------------------------------------------
    
    Options -Indexes
    EDIT : en plus du code htaccess il faut créer un fichier index.html et le mettre dans le répertoire concerné avec le code ci-dessous
    Code:
    <script>history.go(-1);</script>
     
  4. Ankyo-SG
    Ankyo-SG WRInaute discret
    Inscrit:
    12 Mars 2007
    Messages:
    106
    J'aime reçus:
    0
    Un fichier index c’est bien aussi, mais pas très efficace contre les aspirateurs de site
     
  5. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 198
    J'aime reçus:
    1
    interdire le listage si le referer n est pas ton site devrait suffir, non ?
     
  6. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    Non... car cela n'empechera pas à quelqu'un d'accéder à:
    http://mondomaine.com/mydir/image.gif !

    C'est pareil pour la solution proposée par Ankyo-SG.
     
  7. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    euuhh c koi le referer?
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Re: Interdire l'acces à un répertoire mais l'autoriser via p

    Tu mets dans le directory un fichier .htaccess avec dedans "Deny from all". Et voilà, plus personne ne peut accéder à ce répertoire (et aux fichiers qu'il contient) par une requête http classique. Mais ton code PHP peut continuer à accéder aux fichiers.

    Note que c'est bien le code PHP qui doit accéder au fichier (et ensuite envoyer le contenu au navigateur), tu ne peux pas afficher un lien vers une image qui serait dans ce dossier, par exemple, puisque c'est interdit.

    Jacques.
     
  9. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    Re: Interdire l'acces à un répertoire mais l'autoriser via p

    Hello Jacques,

    Aussi simple que cela?? Si cela fonctionne c'est cool!

    Oui c'est bien ce que je veux faire... Le PHP retournera l'image que si la personne a le "droit" !

    Merci,
    Franck
     
  10. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    Pour interdire l'acces à un répertoire mais l'autoriser via php, l'astuce est simple.

    Dans l'exemple, le code recupere tous les fichiers avec une extention .gif et redirige vers /foo, cad nul part.

    Si nous aviosn mis -www.monsite.com/img.gif dans le navigateur, nous serions redirigé vers /foo, qui bien sur n'existe pas.

    Par contre si dans le code source nous faisons par exsmple un print d'une image<img="www.monsite.com/img.gif ">, nous verrons l'image puisque le .htaccess n'intervient pas.

    Code:
    
    Options +FollowSymlinks 
    RewriteEngine On 
    #Empêche l'execution de ces types de fichiers depuis l'exterieur 
    #Renvoie une erreur 404 si de tels fichiers sont demandés 
    RewriteRule ^.*\.gif$ /foo [F] 
    RewriteRule ^.*\.GIF$ /foo [F] 
    RewriteRule ^.*\.Gif$ /foo [F] 
    RewriteRule ^.*\.GiF$ /foo [F]
     
  11. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    Merci mais cela veut dire que si quelqu'un créé une page et met dedans:<img="www.monsite.com/img.gif ">, cela va marcher? Dans ce cas c'est pas ce que je veux...

    Franck
     
  12. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82

    Ce quelqu'un a acces au ftp de ton site pour y mettre ses pages !!???
     
  13. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Plus précisément, le flag F dit qu'il va renvoyer un 403 (Forbidden). Le /foo est juste là parce que RewriteRule a besoin d'un paramètre de "destination", même si dans le cas présent il n'en a pas vraiment besoin.

    Ah oui? Il va falloir m'expliquer la différence entre taper l'URL dans la barre d'adresse d'un navigateur et suivre un lien dans une page vers la même URL. A part le referer (qui n'est pas une information fiable), il n'y a strictement aucune différence, donc dans un cas comme dans l'autre, ça ne marchera pas, les RewriteRules proposées étant fonctionnellement identiques à un Deny from all dans des FilesMatch avec les mêmes regex.

    Pas de miracle de toutes façons, il n'y a aucun moyen qui marche à tous les coups de gérer les deux cas de façon indépendante (sans passer par un script qui utilisera une information externe, comme un authentification, cookie, un paramètre dynamique dans une URL...).

    C'est visiblement une obsession par ici d'utiliser mod_rewrite à tout va. Si on veut interdire l'accès à tous les fichiers avec une extension .gif (ce qui n'est pas la question d'origine), un simple:
    Code:
    <FilesMatch "\.[gG][iI][fF]$">
    Deny from all
    </FilesMatch>
    
    devrait faire l'affaire (ça permet d'éviter de charger mod_rewrite juste pour ça, par exemple). Quoi qu'il arrive une regex qui commence par "^.*" c'est quand même un peu du gâchis. Donc au minimum j'ai tendance à penser (je n'utilise jamais mod_rewrite) que les règles ci-dessus peuvent s'écrire de façon nettement plus concise:

    Code:
    RewriteEngine On 
    #Empêche ces types de fichiers d'être servis
    #Renvoie une erreur 403 si de tels fichiers sont demandés 
    RewriteRule \.gif$ /foo [F,NC]
    
    Avec un commentaire nettement plus exact en prime :)

    Jacques.
     
  14. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    yep, au placard KOogar!!

    on cherche a solutionner ?

    Code:
    Options +FollowSymlinks 
    RewriteEngine On 
    #Empêche ces types de fichiers d'être servis 
    #Renvoie une erreur 403 si de tels fichiers sont demandés 
    #Autorise l'acces par fichier php si le REFERER est correctement renvoyé par le serveur
    
    RewriteCond %{HTTP_REFERER} !^http://www\.domaine\.com [NC]
    RewriteRule ^.*\.gif$ /foo [F]
    J'ai testé et ca marche tres bien :wink: (chose bien sur que je n'avais pas fait avec l'autre code, oups)

    Bien sur tu va nous commenter ca bien mieux que moi et peut etre trouver un paliatif au rewrite qui est trop lourd. Je suis sincerement enchanté par ton intervention. On a avancé :D
     
  15. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Comme déjà dit, le Referer c'est sympa, mais c'est loin d'être fiable. Il y a des cas où le referer n'est pas fourni:
    - certains softs de "sécurité" ou de "protection de la vie privée" genre firewalls, anti-virus etc. le suppriment ou le remplacent;
    - certains types de "liens" ne positionnent pas le referer dans IE.

    Ca veut dire que dans ce cas l'utilisateur ne pourra pas voir le fichier même s'il est intégré tout à fait normalement.

    Avec ton code se pose en plus le problème du site accessible via plusieurs noms de domaine (par exemple site.com et -www.site.com). Si on relâche trop, c'est facile à contourner (par exemple en mettant le nom du site dans le chemin de la page qui référence), si on "resserre" trop on va toujours oublier un cas de figure où ça devrait marcher.

    Bref, c'est loin d'être la solution magique, et d'ailleurs je pense que le posteur original l'avait bien compris, c'est pour ça qu'il voulait que ses fichiers ne soient pas accessibles du tout comme des fichiers statiques via Apache, mais uniquement à travers son PHP (qui va faire un open sur le fichier et le balancer à l'utilisateur dans certaines conditions particulières bien vérifiées). D'ailleurs il y a encore plus simple que toutes les solutions évoquées jusqu'ici pour arriver à ça: mettre les fichier en dehors de l'arbo de fichiers Apache! Evidemment dans certains hébergements mutualisés ça risque de ne pas être possible, mais sinon c'est quand même la solution la plus simple.

    Quant aux tests effectués dans le script qui va "servir" les images, suivant ce qu'on cherche exactement à faire ça peut être très variable. Si on veut juste empêcher n'importe qui ne linker depuis l'extérieur une bonne solution est probablement d'inclure dans l'URL un timestamp et un md5 de ce timestamp + une clef privée, et de vérifier que le md5 correspond et que le timestamp n'est pas trop vieux au moment de servir. Sinon il peut aussi y avoir des solutions à base de cookies, mais ici comme pour les referers c'est un peu sujet à leur acceptation par le navigateur (même si de nos jours je pense que peu de gens se promènent avec des cookies désactivés, il y a tellement peu de choses qui marchent sans...).

    Jacques.
     
  16. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    wouuu, résolu pour moi, puisque coté client je peux pas l'apeler, je vais le faire coté serveur, je m'explique :

    je fait 1 .htaccess qui interdit, allez soyons royal !! de prendre toutes les images.

    Code:
    RewriteEngine on 
    ReWriteRule .*\.(gif|png|jpe?g)$ - [F]
    Je me fais maintenant un ptit fichier avec mon image que j'apel par exmple comme le nom de l'image :

    Code:
    cherche.php :
    
    <?php 
    readfile("cherche.gif");
    ?>
    Et j'ai plus qu'a apeler mon fichier :

    Code:
    <img src="cherche.php"  />

    Ca tourne nickel :D

    T'en pense quoi ?
     
  17. fweens
    fweens Nouveau WRInaute
    Inscrit:
    2 Avril 2007
    Messages:
    6
    J'aime reçus:
    0
    Merci Jacques et à tous pour toutes ces précisions.

    Désolé du retard mais finalement j'ai testé, cela fait ce que je veux. Voici donc le résultat:

    Options -indexes
    Options +FollowSymlinks
    RewriteEngine On
    <FilesMatch "\.[jJ][pP][gG]$">
    Deny from all
    </FilesMatch>

    F.
     
Chargement...
Similar Threads - Interdire acces répertoire Forum Date
Interdire accès à tout le site sauf 1 repertoire URL Rewriting et .htaccess 17 Septembre 2004
Interdire accès à un répertoire mais... URL Rewriting et .htaccess 23 Mai 2004
.htaccess : interdire l'acces a un ensemble de repertoire URL Rewriting et .htaccess 26 Novembre 2003
Interdire une plage d'IP dans le .htaccess via "Deny from" URL Rewriting et .htaccess 9 Septembre 2022
Site d'essai : quelle méthode pour interdire l'accès ? Développement d'un site Web ou d'une appli mobile 19 Octobre 2020
Interdire l'accès au un site aux concurrents Droit du web (juridique, fiscalité...) 30 Janvier 2017
interdire l'accés de certains pays avec le ht.access URL Rewriting et .htaccess 15 Mai 2016
Interdire accès sauf pour . Googlebot URL Rewriting et .htaccess 22 Janvier 2014
Comment interdire TOUS les moteurs de recherche en utilisant le htaccess? URL Rewriting et .htaccess 7 Mai 2013
Interdire l'acces au fichier Robots Débuter en référencement 13 Février 2012
interdire l'accès à une page php Le café de WebRankInfo 7 Octobre 2011
Interdire l'accès de GoogleBot à une page Crawl et indexation Google, sitemaps 23 Juillet 2011
Interdire l'accès direct a un dossier via un navigateur ? Administration d'un site Web 16 Février 2011
Interdire l'acces à des Urls commençant par... Débuter en référencement 9 Janvier 2011
HTACCESS : Interdire les bots dont l'URL contient une chaîne spécifiée URL Rewriting et .htaccess 13 Décembre 2010
Interdire l'accès a certains dossiers, fichiers avec un .htaccess et. URL Rewriting et .htaccess 16 Octobre 2010
Interdire l'accès à un fichier php mais pas l'execution de celuici URL Rewriting et .htaccess 24 Juillet 2010
Interdire l'accès temporairement à mon site au moteurs de recherche Référencement Google 11 Juin 2010
Interdire l'accès à un dossier en préservant le référencement Débuter en référencement 5 Avril 2010
comment interdire les tentatives de piratage et les spam avec .htacces URL Rewriting et .htaccess 14 Décembre 2009