Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2006, 20h42   #1
Invité de passage
 
Inscription : septembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 10
Points : 2
Points : 2
Par défaut [Sécurité] Site sécurisé par php : protéger fichier accès directe

Bonjour,


Alors voici mon problème. J'ai un site protégé par login php et session. Une fois le visiteur rentré, il put accèder à tout : naviguer de fichier php en fichier php ou bien télécharger des fichiers pdf situé dans un autre repertoire.

Cependant je me suis rendu compte qu'en entrant l'adresse directe du fichier pdf : http://monsite.com/Marketing/fichierpdf.pdf, n'importe qui pouvait le télécharger.

Comment faire pour rendre l'accès directe à mes fichiers impossible ?

Merci de votre aide.

PS : je ne souhaite pas utiliser de .htaccess pour le controle d'utilisateur mais bien php/session.

PS2 : j'ai essayé de mettre un .htaccess avec un "deny all" dans le repertoire des pdf, mais celui ci bloque également le téléchargement par les utilisateurs authentifiés !
jeremy2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 22h24   #2
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 26
Points : 14
Points : 14
Ne donner les droits de lecture/ecriture qu'à l'utilisateur qui est associé à ton serveur web (apache, nobody, ...) pour ton répertoire contenant les pdf.
chown + chmod sous Linux.

Puis créer une page php qui ira lire le fichier dans le répertoire pour le restituer.

Tu pourras dans cette page vérifier que l'utilisateur est authentifié,
vérifier l'existance du fichier et le renvoyer à l'utilisateur en réécrivant les entetes.
ça pourrait donner quelque chose comme ça (je ne te certifie pas que le code fonctionne mais ça te donne une base pour démarrer)

Code :
1
2
3
4
5
6
7
8
9
10
11
 
//tu effaces le buffer
ob_clean();
//Tu réécris les entetes pour indiquer au navigateur le type de fichier
header("content-type: application/pdf");
//tu indiques le nom du fichier que le navigateur va afficher
header("Content-Disposition: filename=\"$nom_du_fichier\"");
//tu renvoies les donnees vers le navigateur
flush(); 
// tu lis le fichier
readfile("$chemin_acces_au_fichier");
Ce code ne traite que de l'envoi du fichier et non pas toute la partie vérif' du user/vérif du fichier, etc.

Mais attention : bien vérifier les paramètres d'appel à une telle page comme par exemple par identifiant de fichier à partir d'une base de donnée ou du nom réel du fichier
Ceci afin d'éviter que des personnes mal intentionnées n'accèdent pas à d'autres répertoires (ex. /etc/passwd, etc.)
A toi de bien sécuriser ton script.

Tom
a+
tom_92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 23h14   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Tout à fait d'accord avec la solution de Tom_92.
Quelques précisions : je te conseille de stocker le chemin, le nom du fichier, sa description éventuelle et sa taille en bdd. Ensuite, tu appelles le script de téléchargement avec en paramètre uniquement l'id numérique du fichier. Cela rend le contrôle de la validité du fichier beaucoup plus simple (pour en effet ne pas accéder à un répertoire non autorisé).
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2006, 02h03   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Tu pourrais également utiliser un fichier .htaccess, non pour le contrôle de sessions, mais bien pour protéger ton répertoire contre les accès HTTP directs à tes fichiers :
Ensuite, tu utilises le même style de fichier qu'indiqué ci-dessus (attention à ne pas le mettre dans un répertoire protégé par .htaccess) pour identifir ton user, vérifier que le fichier à télécharger existe puis l'envoyer au navigateur.

Bien entendu, tu peux combiner ces deux techniques, même si cela n'aurait pas un intérêt exceptionnel.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2006, 08h40   #5
HwRZxLc4
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Le problème, si je peux me permètre c'est que le non d'utilisateur et le mot de pass, passe en claire a l'identification et sa ètre obtenu avec ethereal, si tu as un scanne juste avant de taper ton user et ton passwd, a la reconstitution tu as ton user et pass en claire...

J'ai vu sa au cour sécurié linux.
  Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2006, 10h41   #6
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
ou alors tu utilise un httpwd pour demander a tes utilisateur de se reidentifié pour acceder au fichiers.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2006, 11h21   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 26
Points : 14
Points : 14
Pour que les mots de passe ne circule pas en clair => SSL

Après il faut connaitre le degré de sécurité que tu veux appliquer à tes fichiers.

Ethereal = scanne dans un réseau fermé.
tom_92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2006, 13h16   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
On peut aussi hascher les login et mdp par md5 avant transfert, ce qui donne une excellente sécurité (notamment si on utilise un système de jeton avec grain de sel), sans être obligé de passer par SSL (indisponible chez la plupart des hébergeurs gratuits).
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h22.


 
 
 
 
Partenaires

Hébergement Web