2012-05-10 4 views
8

Quello che sto facendo:Come conservare in modo sicuro i file su un server di

Io fondamentalmente bisogno di creare un sito web protetto da una pagina di login scritto in PHP che, una volta effettuato l'accesso, si dispone di una barra di ricerca che legge interi e i dati vengono inviati a uno script PHP che recupera un'immagine con il numero come nome.

(sarò la memorizzazione di alcune migliaia di immagini su questo server da ricercare - immagini di inventario)

-

Che cosa ho bisogno di aiuto con:

Dalla mia ricerca, ho capisci che "non" usi database come MySQL per memorizzare immagini reali a causa della velocità e dell'inefficienza. Se non lo memorizzi in un database e lo lasci sul file system del server come suggerito, se qualcuno digita un URL diretto in una barra degli indirizzi, non lo porterebbe ai file sul mio server?

Come proteggersi da questo. Non voglio che i file sul mio server siano visualizzabili senza passare attraverso la pagina di accesso.

Grazie per l'aiuto, qualsiasi suggerimento o suggerimento sarebbe apprezzato. Questo è importante per me perché in futuro verranno aggiunte informazioni più complesse.

+2

È possibile avere una directory non accessibile tramite HTTP ed è possibile utilizzare uno script php che controlla se l'utente è connesso e in caso affermativo, legge il file dalla directory specificata e lo emette. –

+0

Ho letto per lasciare un file all'esterno della cartella "public_html". Questo lo renderebbe completamente inaccessibile da http? In che modo il mio script php ha accesso ai file, quindi? – DMor

+0

'public_html' è in genere la directory da cui vengono forniti i file, quando si utilizza Apache con cPanel. Ciò significa che quando digiti 'http: // yoursite.com', i dati vengono estratti da'/var/www/username/public_html'. Ciò significa anche che qualunque cosa si digiti nell'URL, '/ var/www/username' è ** non ** accessibile. Significa anche che una directory che avresti creato lì, come '/ var/www/username/files', non sarebbe neanche accessibile. Dal tuo script PHP, dovresti accedervi con qualcosa come 'file_get_contents ('/ var/www/username/files/imagename.extension');'. –

risposta

6

un modo o consigliato f gestisce i download di file tramite PHP (o qualsiasi altro script) utilizzando la cosiddetta intestazione di risposta 'X-Sendfile'.

Lo script PHP gestisce l'autenticazione e una volta convalidato imposterà alcune intestazioni di risposta insieme a un 'X-Sendfile' che indica al server Web di consegnare un file; lo script termina e il server Web prende il sopravvento.

Vedi qui per un semplice esempio:

http://www.jasny.net/articles/how-i-php-x-sendfile/

+1

Vedrò questo, grazie. – DMor

0

si può fare in questo modo scrivere una risorsa servire in php in questo modo

image.php?requestid=..... 

in quel file si ottiene RequestID e leggere effettivo collegamento (link locale) dal database, leggere file immagine quindi dati di uscita a del browser

$id = $_GET['requestid']; 
$link = get_local_link_from_id($id); // return /images/file1.png...... 
$data = file_get_contents($link); 
header('Content-Type', 'image/png'); 
echo $data; 

ma penso che non si dovrebbe fare questo, basta rinominare il file in modo casuale e creare un sacco di loro ....

+0

Devono conservare il numero originale, non è il mio sistema, ma come richiesto dalla persona che mi ha assunto. E questo è abbastanza sicuro? finché il mio script PHP filtra le richieste, correggere? – DMor

+0

GET non è mai sicuro, anche il POST potrebbe non essere sufficiente per la sicurezza. – ilhnctn

+0

@ilis - qual è il punto del tuo commento? GET e POST sono i metodi utilizzati da HTTP, sono "insicuri" solo se mal utilizzati nell'interpretazione dell'input dell'utente. –

1

questo può essere eccessivo per il vostro situtation, ma questo è come mi sto pensando di farlo su un app sto sviluppando:

primo , ci sono 4 server, un server web, un server middle ware e un server dati

quando qualcuno invia una richiesta al server Web, il server Web si connette al server middleware e richiede il file, passando lungo il credenziali dell'utente come una chiave di sessione e il file richiesto. il middleware si connette al db e convalida la sessione e gli utenti privilegiano quel file. restituirà un errore o i dati binari se hanno accesso. se si disattiva il buffering dell'output sia sul server Web che sul server middleware, è possibile inviare blocchi da 100k dal server middleware al server Web e il server Web emetterà il primo blocco mentre riceve il secondo blocco.

il file stesso possono essere memorizzati sul server di database tramite FTP, SFTP, o altro filesharing

non è sicuramente il più efficiente utilizzando x-sendfile, ma se qualcuno è in grado di nematode del pino vostro server web, saranno non hanno ancora accesso al file - negli scenari sopra, lo farebbero. il server web è l'unico server pubblico, quindi il resto dei server dovrebbe essere connesso su una rete privata.

è possibile anche inviare i dati a un server di crittografia che cifrare/decifrare i dati del file effettivi

se qualcuno ha qualche idea su come migliorare su questo, mi interessa.

+0

Interessante, ma questo è decisamente più complesso di quello che mi serve (ma è interessante da leggere). Onestamente non sapevo di .htaccess in quel momento e che può bloccare la visualizzazione di un'intera cartella. L'ho già implementato. Ho un modulo di login HTML che accetta i dati, li invia a uno script di elaborazione che convalida l'utente, che, se convalidato, invia l'utente a una pagina di ricerca. l'utente inserisce un numero di articolo e viene inviato a un altro script di elaborazione che accede a un database con il numero come chiave primaria, contenente un percorso file e altre informazioni. Se esiste, richiama il percorso del file – DMor

+0

la cartella di immagini è protetta da .htaccess ("DENY FROM ALL"). Uso anche un SSL e memorizzo le altre informazioni riguardanti l'immagine in un db MySQL – DMor

Problemi correlati