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 et variable d'environnement


Sujet :

Apache

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut htaccess et variable d'environnement
    Bonjour, je fais un site Internet en PHP. J'utilise un script php et mysql pour que mes utilisateurs se connecte. Ils ont acces a des documents qui sont en ligne. Je voudrait proteger ces documents par un .htaccess.
    Le probleme est le suivant, je veux que si mon user est connecte, il ne voit pas la fenetre d'authentification du .htaccess (= Passer outre la fenetre d'authentification quand je souhaite)

    J'avais pensé a deux solutions, que je n'arrive pas a faire fonctionner :

    1/ Utiliser quelque chose comme un require <variable d'environement>, que j'aurai préalablement initialiser lors de la connexion a mon site de mon user.

    2/ Utiliser le HTTP_REFERER, si il n'est pas nul alors ok, sinon forbidden. Vu que qi on rentre une url a la main, cette variable d'environnement n'est pas initialiser, je pense que ca doit etre le plus simple.

    Voila le souci si quelqu'un peut m'aider, je lui en serai très reconnaissant.

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    De mémoire, je crois que ce n'est pas possible de rendre l'authentification par .htaccess conditionnelle : il n'y a pas de bloc <IfEnv> ou un truc de ce genre dans Apache et les directives d'authentification ne prennent pas de paramètre supplémentaire pour vérifier une condition. J'avais essayé un moment mais sans succès. Il doit y avoir une discussion sur le sujet sur le forum mais je ne la retrouve plus

    Peut-être une autre piste : faire une fausse réécriture d'URL vers une extension bidon et mettre les directives d'authentification dans un bloc <FilesMatch> sur cette extension, par exemple. La difficulté c'est de faire en sorte qu'ensuite l'extension bidon n'empêche pas le site de fonctionner, donc il faut sûrement mettre un Options +MultiViews. A tester.

    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

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    ok merci, ca m'a l'air un peu compliqué ton histoire .
    Il n'y a pas de balise <Ifenv> mais il y a le "require env" ou le "allow from env=". Mais bon j'ai pas réussi. Par contre j'ai trouvé une autre solution, c'est pas super mais c'est mieux que rien, voila en gros l'idée :

    Mes liens dans mon site du style /doc/machin.txt , je vais les remplacer par doc.php?nom=machin.txt. Dans mon doc.php je pourrai tester si le fichier nécessite une connecion ou pas, et apres faire appel au document. Et dans un fichier .htacces je vais forcer le telechargement. Ainsi les gens ne veront jamais l'url (en bas dans la barre d'état, ou en haut dans la barre d'adresse). Donc apres ca sera au pifometre pour ouvrir un fichier !

    Voila tu en pense quoi ?

  4. #4
    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
    Effectivement, il y a le allow from env, je l'avais oublié celui-là. Dans ce cas, on peut essayer en ajoutant un satisfy any qui dira globalement "si un allow passe (donc celui avec from env), alors pas d'authentification". C'est une bonne idée, à tester.

    De toute façon, si tu veux désactiver l'authentification basique selon des critères propres à PHP (variable de session par exemple), tu n'y arriveras pas. Donc le mieux, dans ce cas c'est effectivement de passer par un script PHP (explicitement indiqué dans l'URL ou provenant d'une réécriture) qui vérifie cette variable de session ou le cookie et qui autorise ou non le téléchargement. La difficulté sera de déclencher une authentification basique si le critère n'est pas satisfait : c'est faisable en renvoyant les bons en-têtes HTTP au navigateur mais ce sera aussi à ton script de vérifier que cette authentification est correcte. Autrement dit, tu gères tout par PHP, plus de .htaccess avec des AuthUserFile, etc.

    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

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    En faite j'ai laissé tomber la solution du script php, en faite je faisait un header(location le probleme c'est que ca ne supporte pas les accents.

    Donc par la suite j'ai essayer avec du javascript location.href=, la ca marche, mais en faite en regardant la source de la page on voir l'adresse, donc c'est naze aussi.

    J'aimerais persister sur l'idée du htaccess, mais j'ai un peu de mal a comprendre la logique. Est ce que tu pourrait m'aider, je pense que ca doit etre quelque chose du genre ?? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <LIMIT GET POST>
    satisfy any
    allow from env=HTTP_REFERER
    </LIMIT>

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai vu une de tes réponses d'une autre discussion similaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^<a href="http://.*\.monsite\.com/" target="_blank">http://.*\.monsite\.com/</a> [NC]
    RewriteRule \.(flv|Flv)$ - [F,NC]
    </IfModule>
    SetEnvIfNoCase Referer "^https?://([^/]*)?fmonsite\.com/" local_ref=1
    SetEnvIf Referer ^$ local_ref=1
     
    <FilesMatch "\.(flv|Flv)$">
    Order allow,deny
    Allow from env=local_ref
    </FilesMatch>
    Mais moi j'aimerais pour tous les fichiers que il y ai un HTTP_REFERER. Tu crois que tu arriverai a formuler ca en langage .htaccess

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu ne peux pas garantir qu'il y aura un referrer pour tous les fichiers : les referrer est mis par le navigateur s'il en a envie et si l'éventuel proxy par lequel il passe pour se connecter au Web en a envie aussi. Le referrer n'est pas une garantie.

    Mais je n'ai pas compris pourquoi tu veux un referrer pour tous les fichiers ? En quoi l'exemple donné ne te satisfait pas ?

    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

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    En faite les users, il voit l'adresse quand ils cliquent sur des liens du style /infos/doc/mondoc.txt
    Et donc il peuvent faire au pif :
    /infos/doc/fichier.txt

    et si il existe le fichier existe ils ont acces a fichier.txt. Donc mon site est pas très bien sécurisé. Et mettre un .htaccess qui redemande login + mdp ca m'embete.

    Voila le probleme en faite. D'ou l'idée d'utiliser le referer pour obliger a passer par le site (car si il tape direct dans l'url le referer n'existe pas). Mais j'ai essayer le code et ca ne fonctionnait pas, ce qui est peut etre normal comme tu le disait ca dépend du proxy et du navigateur.

    Tu trouve ca pas grave de laisser comme c'est avec possibilité d'acces via l'url direct ? faut quand meme de la chance pour réussir a ouvrir un fichier en saisissant au pif l'url, en général on s'amuse a ca 2 minutes et on abandonne

  9. #9
    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 splash44 Voir le message
    Mais j'ai essayer le code et ca ne fonctionnait pas, ce qui est peut etre normal comme tu le disait ca dépend du proxy et du navigateur.
    Tu as essayé quoi, exactement ? Dans cet exemple, on bloque les accès venant d'autres sites, pas les accès directs sans referrer. Si tu veux absolument qu'il y ait un referrer, il faut supprimer les lignes en rapport avec un referrer vide (lignes 3 et 8 de l'exemple que tu donnes).

    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

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je t'aime MAC !!!!

    Ca marche !!! franchement MERCI DU FOND DU COEUR, ca fait 2 jour que je suis dessus, j'en pouvais plus. T'es un DIEU ! T'est vraiment le MacGiver des developpeurs

    Donc voila le code de mon .htaccess, qui oblige a passer par le site et non pas en tapant directement l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <IfModule mod_rewrite.c>
    RewriteEngine On
    #RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^<a href="http://.*\.monsite\.com/" target="_blank">http://.*\.monsite\.com/</a> [NC]
    RewriteRule \.(flv|Flv)$ - [F,NC]
    </IfModule>
    SetEnvIfNoCase Referer "^http://monsite/" local_ref=1
    #SetEnvIf Referer ^$ local_ref=1
     
    <Files *.*>
    Order allow,deny
    Allow from env=local_ref
    </Files>
    Meme si c'est pas garanti en fonction des proxy et navigateur, j'ai testé sous firefox et IE6 et ca marche.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/08/2012, 22h28
  2. [langage] Création de variable d'environnements
    Par Smaugg dans le forum Langage
    Réponses: 20
    Dernier message: 26/04/2004, 09h32
  3. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31
  4. nom de fichier et variables d'environnement
    Par joebarthib dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2002, 15h21
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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