Alternative au htaccess

Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
- - Dernière réponse : ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
- 21 avril 2008 à 09:14
Bonjour,

Je suis entrain de réaliser un site internet en PHP, il y a une partie ou Les utilisateurs auront accès à leur fiches techniques en PDF en téléchargement.
Comment pui-jes protéger l'accès du dossier sans passer par .htaccess (car les utilisateurs sont amenés à évoluer et je ne souhaite pas changer mon fichier htaccess tout le temps).
Le but étant de rendre impossible l'accès au répertoire des fiches techniques si on tape son url mais sans demander systematique des mots de passe supplémentaires aux utilisateurs.

Voila, je suis pas sur d'avoir été clair, si vous avez des questions, n'hésitez pas
Afficher la suite 

6 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
0
Merci
Salut,

Pour répondre très concrètement à ta question : utilise les sessions. C'est ce qu'il y a de plus pratique, même si c'est un peu moins sécurisé qu'un .htaccess

Pour répondre à une non question : tu n'as pas besoin de modifier un .htaccess à chaque fois que tu ajoutes un utilisateur : il te suffit d'utiliser un fichier de mot de passe que tu modifieras. C'est pas forcément plus compliqué que de gérer des sessions, et c'est pas forcément moins performant non plus : c'est juste pas le même soft qui travaille (c'est Apache et pas PHP)

Encore une dernière chose : il est possible de combiner l'authentification HTTP avec une base de données MySQL, il existe un module Apache pour ça (mod_auth_mysql).
C'est une combinaison entre la sécurité HTTP fournie par Apache, et la souplesse de gestion des utilisateurs par MySQL.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Commenter la réponse de neigedhiver
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Bonjour,

Mes fichiers PHP sont prets, j'ai déjà utilisé les sessions, mais lorsque qu'on connait l'adresse des repertoires il est facil de se balader dans le site et donc de récupéré les fichiers (qui sont des fichiers pdf).
Pour le modification du htpasswd, c'est pas moi qui vais suivre le site, c'est une personne connaissant rien au PHP ni à HTML d'ailleur.
J'ai vu que certaines personnes mettent des fichiers index.html dans les dossiers pour ne pas qu'on est accès aux fichiers c'est bien ca?
Je suis entrain de regarder la fonction (mod_auth_mysql), est ce compatible avec les sessions? Pas de redondance?

Merci pour toutes ces infos.
Commenter la réponse de ldevun
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
0
Merci
Il ne faut pas que les fichiers soient accessible depuis le net. Il faut qu'ils soient dans un répertoire protégé, ou qui se situe en dehors de l'arborescence de publication.
Il faut alors que les permissions soient gérées par PHHP, qui va lire le fichier et le renvoyer au navigateur(file_get_contents(), puis header('Content-type: application/pdf') puis echo.

Un fichier index.html n'empêche absolument pas de récupérer les fichiers qui se trouvent dans le répertoire. Il empêche simplement (de manière relativement basique) de lister le contenu du répertoire (ce qui peut se faire dans un .htaccess avec Options -Index)

Concernant mod_auth_mysql, il permet de gérer l'authentification HTTP d'après les utilisateurs/mots de passes stockés dans une base de données. Donc, ça fait un peu redondance avec les sessions, effectivement. Cependant, c'est quand même un peu plus sécurisé (pas de cookie, c'est le navigateur qui gère l'authenficiation sur le royaume (realm) défini dans le .htaccess)

Couplé à une connexion SSL, je ne vois pas ce qu'on peut trouver de mieux comme connexion sécurisée (il faut aussi que la base de données soit sécurisée, et qu'un seul utilisateur ait les permissions d'accès, et en lecture seule, à la table contenant les utilisateurs et leurs mots de passe).

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Commenter la réponse de neigedhiver
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Merci pour toutes ces infos,

Il faut que les permissions soient gérées par PHP mais comment je dois faire pour bloquer l'accès au dossier qui contient les fiches? La fonction file_get_contents() peut-elle ouvrir le document dans une nouvelle page, et si c'est le cas, je dois mettre header('Content-type: application/pdf') puis echo au début de chaque fiche technique?

Pour le SSL, j'ai compris le fonctionnement, mon hébergeur OVH le propose mais j'ai le certificat qui apparait donc c'est à voir.
Commenter la réponse de ldevun
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
0
Merci
En fait, il faut que le script qui lit le fichier pdf ne fasse que ça : il ne pourra pas, par exemple, afficher de HTML.
Mais peu importe :
- il se charge de vérifier les permissions via la session.
- si l'utilisateur peut accéder au fichier pdf demandé, le script lit le fichier avcec file_get_contents()
- le script envoit l'entête adéquat avec header() puis affiche le contenu du fichier avec echo.
Selon le paramétrage du navigateur de l'utilisateur, le fichier sera proposé au téléchargement, ou ouvert avec une application adéquate (plugin Adobe Reader par exemple, sous windows). Ca, c'est, a priori, le problème du client : il peut choisir d'ouvrir dans la même fenetre ou une nouvelle, c'est son affaire.
Il est toutefois possible d'utiliser soit l'attribut target="_blank" pour un lien (non conforme XHTML 1.0 strict, mais valide XHTML 1.0 Transitional et Frameset), soit d'ouvrir une popup avec un JS, qui chargera ce script.

Pour ce qui est de la protection du répertoire, un simple .htaccess avec Deny from all suffit
La fonction file_get_contents() et toute les fonctions de fichier de PHP en général, ouvrent les fichiers locaux via le système de fichier, pas via HTTP : PHP en local n'est donc pas soumis aux restrictions du .htaccess.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Commenter la réponse de neigedhiver
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Bonjour,

Je commence à comprendre, cependant ma page étant une page PHP avec plusieurs liens ves les fiches. Je mets où la fonction file_get_contents? Dans la balise ? Mon but étant que le PDF s'ouvre lorsqu'on clique sur le lien dans la page de toutes les fiches techniques.
Commenter la réponse de ldevun