Come posso impostare i download firmati?

1

Scenario

Ho un server web che autentica e reindirizza da HTTP a HTTPS. I clienti possono quindi visualizzare "download" disponibili nel proprio account. Voglio essere in grado di firmare questi link di download - come in, voglio che il link sia usato solo dall'utente autenticato, solo una volta, e voglio essere in grado di recuperare informazioni su quando è stato usato un "token" specifico. .

Domanda

In realtà cosa si chiama? Non riesco a trovare nulla al riguardo, e sono sicuro di averlo visto prima. Ho solo bisogno di scoprire come si chiama o che cos'è una risorsa per poterlo leggere e implementarlo.

Come domanda bonus: qualcuno sa a priori come implementare connessioni di database autenticate a chiave pubblica in PHP (come mysql_connect (), o qualsiasi altra cosa, ma quando il database si trova sulla rete locale invece della stessa macchina, e non si? t voglio che la connessione sia sniffabile)

    
posta gal 24.02.2013 - 06:14
fonte

2 risposte

4

Non conosco la terminologia, ma limitare l'accesso a un link per il download è semplice. Ad esempio, (presupponendo un ambiente LAMP), è possibile generare un hash di download (token) per ogni coppia di pagine di download degli utenti. Ora, nella pagina di download, controlla se l'utente che ha effettuato l'accesso (estratto da $_SESSION ) ha accesso alla pagina specificata (utilizzando MySQL) e controlla l'hash (da $_GET ). Consenti all'utente di scaricare la pagina (utilizzando header('Content-disposition: attachment') seguita da readfile($filename); ), quindi revoca l'accesso al token specificato rimuovendolo dal database.

Tuttavia, dal momento che stai reindirizzando da HTTP a HTTPS, la sessione cambierà. In questo caso, puoi propagare la sessione passando l'id tramite GET / POST usando la tecnica descritta qui .

Anche se avere un accesso HTTP per una pagina HTTPS è una pratica piuttosto brutta: la password / etc può ancora essere sniffata dal middleman.

    
risposta data 24.02.2013 - 08:25
fonte
3

Ci sono due modi per limitare l'accesso a un dato: con procedure e con matematica .

Procedure: ciò richiede che il tuo server sappia in qualche modo chi è connesso. Avrai bisogno dell'autenticazione dell'utente di qualche tipo (ad es. Login + password). L'esecuzione dell'intera operazione in una sessione SSL è un buon inizio. Una volta che sai chi è connesso, è abbastanza semplice per un server concedere o negare l'accesso a uno specifico link di download e registrare qualsiasi accesso.

Le cose diventano (molto) più complesse se non solo vuoi sapere che un utente ha scaricato un file, ma vuoi anche poterlo dimostrarlo (es. un giudice durante la successiva controversia legale.

Matematica: la crittografia può concentrare il problema dei dati di accesso nel problema della conoscenza delle chiavi . È possibile crittografare ogni file con la propria chiave casuale e lasciare i file come download gratuito per tutti. Ma, ovviamente, i dati del file rimangono nascosti a chiunque non abbia la chiave del file. Poiché una chiave di file non è altro che una sequenza di 16 byte casuali o giù di lì, la distribuzione delle chiavi di file può essere ridotta in molti modi, inclusi "metodi fisici" come gratta e vinci . In questo tipo di installazione, non è necessario limitare l'accesso ai file o utilizzare anche HTTPS; si presume che un utente sia stato in grado di scaricare il file non appena ha ottenuto la chiave.

Nota importante: non puoi impedire a un utente che ha scaricato il file una volta di conservarne una copia o di distribuirlo a chiunque desideri. I distributori di contenuti multimediali amerebbero essere in grado di applicare tale restrizione, ma non è possibile mentre il computer dell'utente è ancora il suo computer.

    
risposta data 24.02.2013 - 16:03
fonte

Leggi altre domande sui tag