Come proteggere i file scaricabili in una directory remota da parte degli utenti non premium (in php?)

StackOverflow https://stackoverflow.com/questions/1550071

Domanda

Im la costruzione di una sezione "premium" del mio sito e Im in un bisogno di dare accesso download per i file in un remoto direttamente (su un server diverso), per gli utenti con privilegi particolari (account memorizzati nel DB MySQL). Il mio sito è codificato in php / mysql quindi una soluzione PHP sarebbe grande.

È stato utile?

Soluzione

dirigere tutti i link di download a un file php che farò tutto il controllo delle credenziali.

è possibile chiamare il file download.php

passare lungo i parametri tramite i cookie, get, post, sessione, o qualsiasi modo di verificare i privilegi.

Una volta le credenziali sono verificate, è possibile inviare un'intestazione adeguata.

se si tratta di un'immagine, l'intestazione sarebbe header("Content-type: image/jpeg");

sto supponendo che anche voi acquistato server remoto.

alcuni link utili:

tipi MIME

PHP intestazione Funzione

Altri suggerimenti

Come @pxl Detto questo, è necessario controllare l'autorizzazione e poi in uscita il tipo corretto MIME come un header HTML (come ha detto: header("Content-type: image/jpeg");)

Inoltre, una volta che hai finito con questo, è necessario uscita il contenuto effettivo del file e la sua dimensione (in byte) in quanto tale:

header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();

Basta fare in modo di memorizzare il file in una directory che non è accessibile dal web.

Sono abituato a fare questo in ASP.NET in cui è costruito in, ma questo articolo sembra cronaca vostra situazione esatta.

Ecco quello che vorrei fare:

  1. Costruito un PHP-SOAP-Sever sul server B remoto che contiene i file.

  2. Ogni volta che un utente attiva un download sul server A principale connettersi a SOAP-Server su B e prenotare un biglietto per l'utente specificare un indirizzo IP e l'id / percorso del file da scaricare.

  3. Server B adesso creerà un TICKETID (che dovrebbe essere valida solo per un periodo di tempo limitato) per questo download e restituirlo ad A.

  4. Un server reindirizza l'utente al server B fornendo il TICKETID come parametro GET

  5. Server B ora controlla se il biglietto è stato già utilizzato, è scaduto o se l'utente viene dal IP errato. Se nessuno di loro si applicano servire il file e segnare il biglietto ed usati.

Nota: Sul server B non tenere PHP in esecuzione mentre serve il file, ma utilizzare il intestazione X-Sendfile . In caso contrario, il download potrebbe fermarsi dopo il tempo di esecuzione di PHP max.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top