Envoi de fichiers dans la zone privée d'un site, confidentialité ? - PHP - Programmation
Marsh Posté le 06-01-2012 à 02:13:02
Je m'auto-up
J'ai trouvé une fonction qui va me permettre de cacher le lien de téléchargement à mon utilisateur :
Source : http://php.net/manual/fr/function.header.php (commentaires)
Code :
|
Marsh Posté le 09-01-2012 à 17:00:17
Je vois comme ça quelques solutions pour afficher l'image malgré qu'on ne soit pas l'utilisateur :
1. Récupérer le mot de passe de l'utilisateur (bon ok tu t'attendais pas à cette réponse)
2. une faille include qui permettrait d'inclure un peu n'importe quoi (donc faire un system("ls" ) et de déplacer les images dans un dossier accessible)
3. si ton hash est connu (j'ai du mal à comprendre ce que tu veux dire par "Créer un hash MD5/sha1 en random" puisqu'un hash est parfaitement déterministe) ou connaissable (recalculable), et si les noms des fichiers sont relativement triviaux (genre image0001.jpg), alors il est possible d'y accéder. D'ailleurs, si un jour tu affiches 1 image quelque part à un autre utilisateur, alors il connaitra ton hash ...
Ce que je te conseillerais :
- renommer aléatoirement les fichiers (et garder les traces des nouveaux noms dans la bdd) : si le hash est connu (genre une image est affichée quelque part) il n'est pas aisé de retrouver le nom des fichiers.
- ce que je ferai (il doit y avoir plus propre, vois si tu trouves quelque chose dans ce sens là) : quand ton utilisateur se connecte, tu prends son ip et tu la mets dans le .htaccess du dossier images (et tu la supprimes quand il se déconnecte ou reste pas présent pdt trop longtmeps)
Ainsi tu rajoutes dans ton .htaccess :
Order Deny, Allow
Deny From All
Allow From ip_du_visiteur_connecte
(vérifie la syntaxe)
Ainsi, même si on a ton hash et le nom de l'image, alors il ne sera pas possible de voir l'image si tu n'es pas connecté avec cette IP
Après pas persuadé que ce soit très "propre" de modifier un .htaccess à la volée, voyons ce que vont dire les autres !
A+
Marsh Posté le 10-01-2012 à 01:23:44
tu peux faire des trucs *simples* avec mcrypt() en blowfish par exemple.
une clef user pour definir son repository
une clef user de decryptage a la volée des fichiers au download (que tu cryptes a l'upload evidemment)
avantage, meme avec le chemin du repository les fichiers sont inexploitables
probleme, ca charge en cpu
evidemment si un user choppe les 2 clefs c'est chiant mais c'est plus le meme probleme.
a savoir que ca ne marche que si tu a des users authentifiés.
sinon si ton probleme c'est juste de cacher un chemin suffit de faire une function ou tu envois juste le nom du fichier, (le path complet etant calculé a partir d'une clef user) et tu renvois le stream.
le repertoire les contenant physiquement etant lui inaccessible via http (deny from all) mais RW pour le user executant apache
Marsh Posté le 05-01-2012 à 21:04:06
Bonjour ,
Sur la partie privée d'un des sites que je gère (php maison, pas de frameworks/libs/CMS...) je dois créer un envoi de fichiers qui n'est accessible que par le membre qui a fait l'upload (inaccessible par les autres).
Pour l'instant la technique que j'ai trouvé c'est :
- Créer un hash MD5/sha1 en random à la création du compte, le stocker dans la table des utilisateurs
- Au premier upload de fichier par un membre créer le dossier /uploads/[hash]/ pour mettre le fichier dedans
- Interdire le listage des repertoires dans /uploads/
Les fichiers sont relativement confidentiels (pas du secret défense non plus hein ) et je me demande si ma méthode est vraiment safe (à priori si personne ne peut lister les dossiers de /uploads/ il n'y a pas de risques ?).
Connaissez vous d'autres méthodes à ce niveau ? (pas de stockage en binaire dans la base de données, ce sont des gros fichiers < 2Mo).
Merci