2010-09-28 7 views
10

Sto usando PHP/MySQL per gestire il caricamento delle immagini. Voglio che tutte le immagini che vengono caricate nella galleria dell'utente loggato siano accessibili solo dall'utente loggato. Non voglio che le persone siano in grado di indovinare il nome del file e collegarlo direttamente ad esso.Come posso proteggere le foto private che un utente carica sul mio sito?

Sto pensando che io posso solo memorizzare le immagini al di fuori del Webroot e accedervi attraverso alcuni PHP. Tuttavia, se l'utente desidera condividere in un secondo momento l'immagine con un amico tramite un collegamento, come posso consentirlo?

Ci sono altri passi che devo prendere per assicurarsi che solo l'utente può vedere le loro foto? Prendo molto sul serio la privacy degli utenti e voglio farlo bene.

Grazie per il vostro aiuto in anticipo!

risposta

9

Hai ragione nel presupposto originale. Archiviare i file al di fuori della directory pubblica e utilizzare uno script PHP per controllare l'autorizzazione e visualizzare l'immagine.

per aggirare il problema di condivisione si può dare loro una zona dove si può dire "Condividi questa foto" e verrà visualizzato un URL come

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

XA21IW sarebbe qualche hash univoco memorizzato in una tabella e possono specificare una durata o puoi crearne uno tu stesso. Quando la pagina viene caricata e v viene trasferito, è possibile cercare una tabella per determinare se si tratta di un hash valido per quell'ID immagine.

Avete alcune opzioni qui. Ogni volta che si fa clic su "Condividi questa foto" è possibile:

  1. Distruggi tutti i vecchi hash
  2. Aggiungi al catasta
  3. consentire loro di configurare una scadenza ecc ...

Or Consenti semplicemente alle immagini di essere pubbliche/private.

+0

+1 Avevo 2 anni di tempo per pubblicare qualcosa di molto simile. – Nacho

+1

Grazie per la rapida risposta. Questo è molto simile all'approccio che avevo in programma di prendere. Fondamentalmente volevo essere sicuro che non ci fosse un modo più sicuro e che non stavo dimenticando nulla. Grazie! – sherril8

2

È possibile utilizzare un sistema di condivisione basato su profilo (utente), in cui l'utente con accesso A può indicare che l'utente con accesso B è autorizzato a visualizzare l'immagine C e può aggiungere/rimuovere tali autorizzazioni a proprio piacimento.

Se collega la visualizzazione a un account utente non è possibile, si potrebbe avere 'visualizzare le password' sulle immagini o su gruppi di immagini (ad esempio una galleria); l'URL per visualizzare le immagini controllerebbe se l'utente/proprietario è quello che guarda e, in caso contrario, richiederebbe la password.

1

penso che non c'è nessun problema è la memorizzazione delle immagini al di fuori del Webroot e accedervi attraverso alcuni PHP. Puoi sempre accedervi con lo script php, ogni volta che l'utente lo condivide .. anche se è più sicuro farlo, perché puoi sempre eseguire alcuni controlli di sicurezza. prima di visualizzare effettivamente l'immagine.

Grazie.

0

Si salva l'immagine sul server, si inserisce il nome dell'immagine, i dati di cui si ha bisogno e qualche hash in DB ... di quanto si imposta il percorso dell'immagine nel file php chiamato images.php dove si riceve questo hash con GET e trova l'immagine per hash dal tuo DB e con l'intestazione impostata su image/GIF example crea l'immagine. Il percorso dell'immagine sarà images.php? Hash = abcdefg.

Altre pensa a permessi utente e quindi ... Penso che ci siano alcune risponde con questa soluzione ... è tranquillo facile ...