C'è un modulo nginx veramente buono che lo fa.
L'URL ottiene due parametri: chiamiamoli s (sicurezza) e t (timestamp). La sicurezza è un hash sicuro generato da timestamp, path e sale (nel tuo caso basta aggiungere l'ip).
$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = '/download/webapp.rar';
$timestamp = time() + 3600; // one hour valid
$hash = md5($salt . $ip . $timestamp . $path); // order isn't important at all... just do the same when verifying
$url = "http://mysite.com{$path}?s={$hash}&t={$timestamp}"; // use this as DL url
per verificare:
$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = $_SERVER['REQUEST_URI'];
$hashGiven = $_GET['s'];
$timestamp = $_GET['t'];
$hash = md5($salt . $ip . $timestamp . $path);
if($hashGiven == $hash && $timestamp <= time()) {
// serve file
} else {
die('link expired or invalid');
}
Ora è solo bisogno di riscrivere il download a questo "man in the middle" -script e si è fatto.
Esempio riscrittura per nginx:
location /download {
rewrite ^.*$ /download.php last;
break;
}
io non sono davvero familiarità con apache riscrive così si può verificare da soli.
Se si utilizza uno dei seguenti moduli, non è necessario verificare tutto da soli ed è molto più performante, ma si noti che offre una maggiore configurazione e talvolta un altro modo per generare l'url e l'hash (vedere modulo documenti qui).
Oppure basta usare il nginx sicuro modulo di collegamento: http://wiki.nginx.org/HttpSecureLinkModule
C'è anche un ciondolo per lighty: http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload
O il nginx sicuro modulo di scaricare: http://wiki.nginx.org/HttpSecureDownload
Forse c'è qualcosa per apache troppo ... Forse potresti fare qualcosa con riscrive lì ...
fonte
2011-10-27 15:35:13
"Senza database"? Che tipo di requisito è questo? Devi assolutamente * memorizzare * alcuni dati per risolvere questo problema, e un database è il posto migliore * di gran lunga * per farlo. Perché mai stai cercando di evitare l'uso di un database? – meagar
Senza il database, è possibile ottenere ciò usando 'cookie' impostando la loro' scadenza '. Tuttavia, il problema è che è possibile rimuovere i cookie. quindi questo non è un modo affidabile. –
@GhazanfarMir ... a parte il fatto che i cookie possono essere falsificati così facilmente da renderli praticamente inutili per questo ... – DaveRandom