|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
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... |
|
|
00
|
|
|
#2 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
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 |
|
|
00
|
|
|
#3 |
![]() ![]() Nicolas ValléeIngénieur Système Inscription : décembre 2005 Messages : 9 771 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
@ 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... |
|
|
00
|
|
|
#5 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
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 |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
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? |
|
|
00
|
|
|
#7 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
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... |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
@ 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 !
|
|
|
00
|
|
|
#10 | |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
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 ? |
|
|
00
|
|
|
#12 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
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 |
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 514 ![]() |
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... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com