Stiamo lavorando su un'app Web, in cui (tra le altre funzionalità) i nostri utenti possono caricare i propri file. Tuttavia non possiamo archiviare questi file sul nostro VPS perché lo spazio di archiviazione è limitato, quindi abbiamo deciso di utilizzare S3.
Il problema principale è che dobbiamo assicurarci che gli utenti possano accedere solo ai propri dati. Quindi conserviamo l'elenco dei file nel nostro database e l'elenco degli utenti che hanno accesso ad essi. Il nostro server può facilmente decidere se un utente ha o meno accesso a un file. Ma come servire effettivamente i file agli utenti?
Ci sono già alcune possibilità che ho già preso in considerazione, ma nessuna sembra essere la migliore.
1. Generazione (scadenza) di URL firmati con PHP
Questo è un approccio davvero semplice, è anche veloce ma si traduce in URL molto brutti e lunghi.
2. URL offuscati
Questo significa che noi mantenere il pubblico dei file per la lettura su S3, ma tutti i file sono memorizzati in difficile da indovinare cartelle denominate come: 24fa0b8ef0ebb6e99c64be8092d3ede20000
. Tuttavia, forse questo non è il modo più sicuro di andare. Anche se non puoi mai indovinare il nome di una cartella, dopo averlo conosciuto (perché in realtà hai accesso ad esso), puoi condividere quel collegamento con chiunque (con qualsiasi persona non autorizzata).
3. Scarica i file attraverso il nostro server
Ciò significa che i file non sono serviti direttamente da S3, ma prima il nostro server lo legge in modo sicuro e lo serve. Non lo vogliamo davvero :)
4. Verifica referrer
La soluzione URL offuscati può essere migliorata "assicurandosi" che la richiesta provenga dal nostro server (è possibile impostare S3 per controllare il referrer). Tuttavia, questa sarebbe una soluzione molto inaffidabile, perché non tutti i browser inviano i dati del referrer e possono anche essere falsificati.
Qual è un buon modo per servire i file da Amazon S3 in modo sicuro per diversi client?