Come proteggere i file scaricabili in una directory remota da parte degli utenti non premium (in php?)
-
20-09-2019 - |
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.
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:
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:
-
Costruito un PHP-SOAP-Sever sul server B remoto che contiene i file.
-
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.
-
Server B adesso creerà un TICKETID (che dovrebbe essere valida solo per un periodo di tempo limitato) per questo download e restituirlo ad A.
-
Un server reindirizza l'utente al server B fornendo il TICKETID come parametro GET
-
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.