Forum général.général Gestion des sessions par Apache (ou autre magouille qui marche)

Posté par  .
Étiquettes : aucune
0
4
mar.
2005
Bonjour,

Nous utilisons un "espace client" protégé par login/mot de passe (stockés dans une base mysql) où il peut voir l'état de ses factures, comment ça se passe, etc.
Lorsque l'utilisateur est authentifié, des variables session sont créés par php.
Jusque ici, tout roule sans problème.


Là où le problème se corse, c'est qu'il faut que le client accède à un répertoire personnel ou il consultera ses petits fichiers, aura un aperçu des produits en développement, pourra télécharger les documents word, pdf ou excel qu'on lui mettra à disposition, bref une sorte de dossier fourre-tout qu'il pourra explorer, lister les répertoires, etc.

Plusieurs contraintes m'arrivent sur la face :

- Le répertoire doit être protégé. Seul l'utilisateur a accès à son répertoire personnel.
- L'utilisateur ne doit pas pouvoir voir le dossier de son voisin
- L'utilisateur ne doit pas s'enregistrer plus d'une fois. Il a déjà donné son login/mdp au début.


Je pensais utiliser les fichiers .htaccess/.htpasswd tout simplement mais comme il ne doit pas s'enregistrer une deuxième fois, ce système tombe à l'eau. Sauf si apache arrive à lire et gérer les variables de sessions.

Apache sait-il gérer les variables de session ?
Si oui, est-il possible que l'authentification de .htaccess se fasse à partir de variables session ?
Si non, avez-vous une idée pour me tirer d'affaire de ce bourbier ?

J'ai entendu parler du mod_session pour apache (introuvable sur le net o_O ).
Peut-être que c'est ce que je cherche.

J'ai aussi une autre idée, ce serait que PHP envoie le login/mdp à apache lorsque l'erreur 403 arrive. En d'autres termes, il capterait les headers de apache et renvoyait directement le bon login/mdp sans que l'utilisateur ni voye que du feu.
Compliqué, sûrement, mais possible ? Aucune idée...

Je vous remercie des idées ou solutions que vous pourriez m'apporter
  • # Sessions sur répertoires

    Posté par  (site web personnel) . Évalué à 2.


    J'ai aussi une autre idée, ce serait que PHP envoie le login/mdp à apache lorsque l'erreur 403 arrive. En d'autres termes, il capterait les headers de apache et renvoyait directement le bon login/mdp sans que l'utilisateur ni voye que du feu.


    Possible, mais pas propre du tout.

    Moi ce que je ferais, c'est que tout soit géré par php, grâce à mod_rewrite, ou même sans d'ailleurs.

    A la base de tes répertoire utilisateurs, tu met un bon 403 pour tout le monde.

    Et après, c'est ton script php qui donne les fichiers.

    Donc en gros tu demandes pas http//site.org/homes/~user/doc.sxw mais tu demandes http//site.org/protect.php?file=~user/doc.sxw . Ce script php utilise bien sûr sans problème les sessions php. Après, si y'a droit, tu renvoies le fichier ( avec le bon header("Content-type") ou un truc comme çà et la fonction readfile), et sinon, tu renvoies header("403 Forbidden") (ou un truc de ce genre).

    Attention à protéger ta variable file pour empêcher qu'on demande "/etc/passwd" ou "../../../etc/passwd".

    Une fois que çà çà marche comme tu veux, tu peux utiliser mod_rewrite pour faire disparaitre à la vue de l'utlilisateur la partie "protect.php?file=" de l'URL.


    RewriteEngine On
    RewriteRule ^/homes/(.*) protect.php?file=$1 [L]


    (Ou un truc du genre)

    En espérant être clair...
    • [^] # Re: Sessions sur répertoires

      Posté par  . Évalué à 1.

      Merci beaucoup pour la réponse ! Et quelle clarté !

      C'est une idée très ingénieuse que d'utiliser le système d'URL rewriting.

      Par contre, je n'ai pas mentionné que le répertoire peut contenir un site, donc un fichier php qui doit être interpreté. Avec du html qui contient des liens relatifs sur des images, d'autres fichiers etc...

      Cela corse un peu la chose mais je pense que ça reste possible en appelant les fichiers avec readfile en utilisant http ( et non pas le chemin du fichier en local comme je pensais (nous pensions?) ).

      Comme ça, les fichiers php seront directement interpretés.
      Qu'en penses-tu ?
      • [^] # Re: Sessions sur répertoires

        Posté par  (site web personnel) . Évalué à 3.

        Pour les liens raltifs sur d'autres fichiers, çà rends juste obligatoire l'utilisation de mod_rewrite.

        Par contre, s'il y a du php qui doit être interpété, c'est plus compliqué. readfile recrache le fichier tel quel. Donc ce n'est pas bon : tu auras le source php.

        Si tu veux que le php soit interprété, je mettrais ma solution à la poubelle. Il faut que tu trouves un truc au niveau d'apache.

        Je m'explique : pour que le php soit interprété, il faudra faire des includes. Et ces includes auront l'environnement de ton appli pour éxecution, donc pourront changer des variables, avoir des droits... Pas bon du tout. Sauf s'il y a un moyen d'éxécuter la page comme si elle était toute seule, c'est à dire pas la fonction include.

        Regarde dans ce cas la fonction virtual qui semble très intéressante, et que je ne connaissais pas. Elle pourrait d'ailleurs remplacer la fonction readfile et simplifier beaucoup ce que je te disais.

        Mais lis bien ce truc, et attention à la sécurité.
        http://fr2.php.net/manual/fr/function.virtual.php(...)

        (Trop bien cette fonction, elle va peut-être simplifier mon site...)
  • # Perso

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Moi personnellement je ferais un module apache qui gère les accès sur les pages statiques, en regardant si le cookie d'identification est correct (un truc tranquille avec md5+clé privée par exemple).

    Ca permet de desservir des pages statiques tout en étant sûr que la personne est bien identifiée. Maintenant il faut coder le sien c'est sûr...
    • [^] # Re: Perso

      Posté par  . Évalué à 1.

      Je suis désolé mais je ne sais pas (encore) écrire de module apache.

      Est-ce qu'il n'existe pas déjà un module apache qui contrôle l'accès avec les cookies ?

      Si c'est le cas, je peux l'utiliser dans un htaccess après avoir transformé la session en cookie ?
      Ainsi, je ne serais pas obligé de gérer le système de redirection ou tout autre système de transfert de fichier via php.
      • [^] # Re: Perso

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        Si c'est une pour boite elle peut trouver quelqu'un qui a les compétences pour le faire et $$ ?

        Il ne faut clairement pas que t'ai à faire un transfert en php, il faut que ce soit natif dans Apache, pour les modules ça doit exister, cherches mod_auth_glcookie
  • # Dans l'url

    Posté par  . Évalué à 2.

    Utiliser une url du type http://login:mdp@serveur/repertoire/(...) pour acceder au répertoire ?

    Dam

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.