2010-09-28 5 views
10

J'utilise PHP/MySQL pour gérer le téléchargement d'images. Je souhaite que toutes les images téléchargées dans la galerie de l'utilisateur connecté ne soient accessibles que par l'utilisateur connecté. Je ne veux pas que les gens puissent deviner le nom du fichier et le lier directement.Comment sécuriser les photos privées qu'un utilisateur télécharge sur mon site?

Je pense que je peux simplement stocker les images en dehors du site Web et y accéder via PHP. Cependant, si l'utilisateur souhaite partager l'image avec un ami via un lien, comment l'autoriser?

Y a-t-il d'autres mesures que je dois prendre pour m'assurer que seul l'utilisateur peut voir ses photos? Je prends très au sérieux la vie privée des utilisateurs et je veux que ce soit juste.

Merci pour votre aide à l'avance!

Répondre

9

Vous avez raison dans votre hypothèse d'origine. Stockez vos fichiers en dehors du répertoire public et utilisez un script PHP pour vérifier l'autorisation et afficher l'image.

Pour contourner le problème de partage, vous pouvez leur donner un endroit où ils peuvent dire « Partager cette photo » et il affichera une URL comme

http://www.yoursite.com/image/12390123?v=XA21IW 

XA21IW serait une hachage unique stocké dans une table et ils peuvent spécifier une durée de vie ou vous pouvez en coder un vous-même. Lorsque la page est chargée et que v est transmis, vous pouvez rechercher une table pour déterminer si elle est un hachage valide pour cet ID d'image.

Vous avez quelques options ici. Chaque fois qu'ils cliquent « Partager cette photo » vous pouvez:

  1. détruire tous les anciens hash
  2. Ajouter à la pile
  3. leur permettent de configurer une expiration etc ...

Ou simplement permettre aux images d'être publiques/privées.

+0

+1 J'étais à 2s de poster quelque chose de très similaire. – Nacho

+1

Merci pour la réponse rapide. C'est très similaire à l'approche que je prévoyais de prendre. Je voulais essentiellement m'assurer qu'il n'y avait pas un moyen plus sûr et que je n'oublie rien. Merci! – sherril8

2

Vous pouvez utiliser un système de partage de profil (utilisateur), où l'utilisateur connecté A peut indiquer que l'utilisateur connecté B est autorisé à voir l'image C et peut ajouter/supprimer ces autorisations à volonté.

Si la liaison d'un affichage à un compte d'utilisateur n'est pas possible, vous pouvez afficher des mots de passe sur les images ou sur des groupes d'images (comme une galerie); l'URL pour voir les images vérifierait si l'utilisateur/propriétaire est celui qui regarde et sinon, il demanderait le mot de passe.

1

Je pense qu'il n'y a aucun problème à stocker les images en dehors de la racine Web et à y accéder via PHP. Vous pouvez toujours y accéder avec le script php, chaque fois que l'utilisateur le partage .. même s'il est plus sûr de le faire, car vous pouvez toujours effectuer des contrôles de sécurité. avant d'afficher réellement l'image.

Merci.

0

Vous sauvegardez l'image sur votre serveur, placez le nom de l'image, les données dont vous avez besoin et un hash dans votre BD .... que de définir le chemin de l'image vers le fichier php appelé images.php où vous recevez ce hachage avec GET et trouver l'image par hash de votre DB et avec l'en-tête mis à l'image/GIF exemple créer une image. Le chemin vers l'image sera images.php? Hash = abcdefg.

D'autres pensent à la permission de l'utilisateur et ainsi ... Je pense qu'il y a quelques réponses avec ces solutions ... c'est calme facile ...

Questions connexes