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 08/03/2006, 09h10   #1
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
Par défaut [Sécurité] limiter accès à un fichier (pas htaccess)

Bonjour,

J'ai développé un petit intranet pour la boite dans laquelle je bosse, mais j'aimerai offrir aux utilisateurs la possibilité de poster des fichiers avec accès sécurisé, cad l'obligation de saisir un log/pass (mais sans ouvrir de session) pour accéder à un fichier. htaccess ne correspond pas tout à fait à ce que je veux faire dans la mesure où ce système n'est pas des plus souples dans la gestion des log/pass, répertoires/sousrépertoires...

Actuellement lorsqu'un fichier est protégé, un pop up html s'ouvre pour demander les paramètres et affiche (ou non ) l'accès au fichier. Le nom du fichier est généré aléatoirement sur 30 caractères. Le problème est que même avec un nom aléatoire, mes fichiers restent accessibles directement.

En fait, je voudrais que les fichiers qui ne sont pas du html ou du php ne puissent s'ouvrir qu'avec le fichier de script "ouverture.php" (par exemple).

Quelqu'un aurait-il une idée?

Merci

@ modérateur : si je suis hors sujet, n'hésitez pas à déplacer mon post dans le bon forum... Perso je savais pas trop dans lequel poster donc...
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 09h20   #2
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

Le souci qui se pose si tu ne souhaites pas utiliser de protection par .htaccess est que tes fichiers seront forcément accessibles, dans l'absolu, si ton utilisateur découvre leur URL permanente.

Cela dit, tu pourrais les stocker dans ta BDD (plutôt qu'en temps que fichiers indépendants) dans une table contenant au moins un id, le type MIME de ton fichier et un champ BLOB pour le contenu. C'est très gourmand en mémoire mais le BLOB est là pour cela.
__________________
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 08/03/2006, 09h39   #3
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 771
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 771
Points : 14 296
Points : 14 296
a priori il faut un .htaccess laissant l'acces a localhost seulement...
voire aucun acces si tu charges tes fichiers par un autre moyen et que tu le peux

et ensuite tu peux faire ta gestion perso et envoyer le contenu du fichier avec readfile
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 09h57   #4
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
@ kirkis : ok, j'ai été un peu vite en besogne en disant que je ne voulais pas de htaccess. Disons que l'emploi de htaccess de façon classique avec :

require valid user

n'est pas une solution adaptée à ce que je veux faire.

Maintenant l'utilisation d'un htaccess global est tout à fait envisageable.

@ gorgonite : l'accès au fichier en localhost via htaccess permet-il aux utilisateurs locaux d'accéder à tous les fichiers ?

en tous cas merci de votre aide...
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 10h00   #5
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
En ce cas, utilise plutôt un .htaccess de type :
(Je croyais que c'était ça la forme classique, d'ailleurs)
Puis tu suis la méthode proposée par gorgonite.

C'est au contraire très flexible, il suffit de bien l'utiliser ^^
__________________
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 08/03/2006, 10h14   #6
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
je précise aussi que forcer le téléchargement du fichier est tout à fait envisageable.

donc si j'ai bien compris, je mets un deny from all (ou localhost?) sur tous mes fichiers (protégés ou pas) qui va me permettre via un script de lire le fichier et de balancer le contenu à l'utilisateur, c'est ça?
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 10h37   #7
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
L'idée est de refuser toutes les requêtes HTTP à tout ce que contient ton répertoire (y compris ses sous répertoires).
Ainsi, le seul moyen d'accéder à ces fichiers est de demander à PHP de les lire et de les envoyer au client.

Tu peux passer par une table de ta BDD pour ne transmettre que des identifiants dans tes liens (+ sécurisé, + pratique) ou bien transmettre le chemin réel (+ lisible) à ton script de lecture.

Concernant les exceptions de ton fichier .htaccess, je te recommande la doc d'Apache [httpd.apache.org] et le forum Apache [developpez.com].
__________________
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 08/03/2006, 10h50   #8
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
Après lecture de vos réponses pour lesquelles je vous remercie, je coirs que je tiens ma solution dont je vous fais part ici pour ceux que ça pourrait aider :

je mets un deny from all sur tous les fichiers postés protégés. Ainsi aucun problème d'accès direct.

Pour la lecture, je passe par un fichier php d'autentification.

Si l'autentification est ok :
avec le script, j'ouvre le fichier,
je le lis et
je le copie dans un répertoire temporaire (généré dynamiquement et aléatoirement).

Je balance cette copie à l'utilisateur et une fois qu'il est ouvert,

je supprime le fichier temporaire.

Alors certes ça donne accès au fichier de façon hyper brève à tous les utilisateurs, mais les noms de répertoires aléatoires + nom de fichier aléatoires, + accès très limité en temps puisque supprimé juste après = faudrait que j'ai vraiment pas de bol pour me faire hacker mes fichiers...
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 10h52   #9
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
@ kirkis : je reste quand même dubitatif quand au stockage des fichiers dans un BDD du fait de la place que ça prend... c'est pour cela que je n'inclue pas ce procédé dans la solution que je propose. Maintenant c'est simplement ma façon de voir et je ne dis pas que la tienne n'est pas bonne !
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 10h55   #10
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
Citation:
Envoyé par grinder59
@ kirkis : je reste quand même dubitatif quand au stockage des fichiers dans un BDD du fait de la place que ça prend... c'est pour cela que je n'inclue pas ce procédé dans la solution que je propose. Maintenant c'est simplement ma façon de voir et je ne dis pas que la tienne n'est pas bonne !
Moi, je le dis
Je l'ai simplement proposé car tu disais d'emblée que tu voulais éviter .htaccess...
En clair : évitez de stocker des fichiers dans la BDD !


[Edit] Pourquoi copier le fichier ? Tu peux l'envoyer directement au navigateur, ainsi tu n'auras pas de souci de noms identiques, pas de souci de manque d'espace disque, pas de perte inutile de temps processeur, pas de faille de sécurité...
__________________
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 08/03/2006, 11h06   #11
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
heu... en fait après réflexion, y'a un truc que je ne sais pas faire... c'est justement l' "envoyer" au navigateur.

je fais un $buffer = fread(...) de mon fichier (ouvert avec fopen).

en suite, je fais un simple echo $buffer; ? ça suffit ?
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2006, 11h19   #12
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
Non, cela ne suffit pas, il te faut aussi utiliser la fonction header() avec les bons paramètres, notamment Content-Type et Content-Disposition.
__________________
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 08/03/2006, 11h28   #13
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 514
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 514
Points : 128
Points : 128
Vi de la façon suivante, ça tourne...

header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$nomdufichier);
readfile($chemindufichier.$nomdufichier);

En tous cas, merci à tous...
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h38.


 
 
 
 
Partenaires

Hébergement Web