Implémentation d'un dossier d'images privé -
heriquet - 09/01/2012
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.2
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
Petite question pratique : je dois réaliser un site complètement privé car il contiendra des informations ayant trait à la vie privée des utilisateurs. Chaque personne recevra et un login et un pass et aura accès a son dossier personnel.
Jusqu'ici tout le monde pense "Oui CMSMS peut faire ca, installe FEU". Parfait c'est ce que je comptais faire !
Cependant, petite subtilité, le dossier de l'utilisateur contiendra des photos et ces photos ne doivent en aucun cas être diffusées. Donc pas question d'avoir des urls du type "
http://www.monsite.fr/uploads/dossier/image.jpg".
J'ai déjà vu des systèmes qui passaient par un script "download.php" qui je l'imagine réalise certains tests d'accès.
Et je suppose que les dossiers d'images ne sont pas accessibles en public et ont des droits d'accès limités au script download.php afin de ne donner les images qu'aux personnes autorisées ?
Et je charge dès-lors les images une à une avec un loader JavaScript lorsque la page est chargée éventuellement ?
Je n'ai jamais fait cela donc je me contente de supposer !
Merci pour votre aide,
Heriquet
Implémentation d'un dossier d'images privé -
bess - 09/01/2012
mode paranoïaque :
1 : modifie ton .htaccess de façon à empêcher l'accès web au répertoire des photos
2 : monte un tag utilisateur qui prend deux paramètres : un path vers une image + un sid qui sera pour nous l'id de la session FEU. Ton tag utilisateur vérifie en premier point que le SID de FEU existe bien en base. Pour cela c'est assez simple puisque FEU et customcontent te met à disposition pas mal de code du type if(islogged($pseudo)). Si le SID passé en paramètre correspond bien à un identifiant FEU actuellement connecté alors passe au point suivant. Sinon tu remplace le path vers ton image par un path préconçu d'une image type 404.jpg ou 401.jpg que tu aura pris soin de customiser pour l'occasion. Ensuite tu passe au point suivant
2bis : comme à chaque fois qu'on passe un chemin par paramètre, il faut être très vigilant sur les
failles de sécurité. Je te conseil peut être de te contenter d'un répertoire fixé à l'avance et ne faire passer que le nom du fichier + une vérification que le paramètre ne contienne pas des conneries du type "../../../config.php" et autre.
3 : code dans la suite du même tag utilisateur un
lecteur du fichier image et fait un beau echo $monBufferImage pour le retourner. Bien évidement tu auras pensé préalablement à faire un echo des headers HTTP qui correspondent à l'image selon l’extension.
3b : pense en même temps à retourner des headers pour éviter la mise en cache
Code :
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
4 : colle ta balise dans une page nommée 'toto' qui sera ni dans le menu, ni cacheable, ni searchable ni rien.
5 : monte ta galerie en prenant soin de remplacer dans le gabarit toutes les occurances des url d'images par un appel à index.php?page=toto
&showtemplate=false&SID=...&path=...
Note : &showtemplate=false te permet de t'affranchir du gabarit affecté à la page toto, dans notre exemple c'est comme avoir une page php vide avec uniquement le code de la balise utilisateur dedans.
Voilà
Normalement tes images seront envoyée "telles que" des images le seraient au navigateur. L'url de chaque image pointera vers la page toto et bien évidement le SID évite qu'une url se promène sur la toile ou soit crawlée par google.
Implémentation d'un dossier d'images privé -
heriquet - 09/01/2012
Super merci !
Faudra que je me penche sur customcontent car j'ai encore jamais installé ce module dont j'ai lu beaucoup de bien !
Je feedback dès que j'en suis un peu plus loin mais c'est un projet qui est encore en phase de specs donc on a le temps !
Bonne aprem et peut-être à mercredi !