Wir arbeiten an einer Web-App, mit der unsere Benutzer (unter anderem) ihre Dateien hochladen können. Wir können diese Dateien jedoch nicht auf unserem VPS speichern, da der Speicherplatz begrenzt ist. Daher haben wir uns für S3 entschieden.
Das Hauptproblem ist, dass wir sicherstellen müssen, dass Benutzer nur auf ihre eigenen Daten zugreifen können. Daher behalten wir die Liste der Dateien in unserer Datenbank und die Liste der Benutzer, die Zugriff darauf haben. Unser Server kann leicht entscheiden, ob ein Benutzer Zugriff auf eine Datei hat oder nicht. Aber wie sollen die Dateien tatsächlich den Benutzern bereitgestellt werden?
Es gibt einige Möglichkeiten, die ich bereits in Betracht gezogen habe, aber keine davon scheint tatsächlich die beste zu sein.
1. Generieren (Ablaufen) signierter URLs mit PHP
Dies ist ein wirklich einfacher Ansatz, der auch schnell ist, aber zu sehr, sehr hässlichen und langen URLs führt.
Hier erfahren Sie, wie es geht .
2. Verschleierte URLs
Das bedeutet , dass wir halten die Dateien öffentlich für Lese auf S3, aber alle werden die Dateien in schwer gespeicherten Ordnern zu erraten wie: 24fa0b8ef0ebb6e99c64be8092d3ede20000
. Vielleicht ist dies jedoch nicht der sicherste Weg. Selbst wenn Sie niemals einen Ordnernamen erraten können, nachdem Sie ihn kennen (weil Sie tatsächlich Zugriff darauf haben), können Sie diesen Link für jeden (für jede nicht autorisierte Person) freigeben.
3. Laden Sie die Dateien über unseren Server herunter
Dies bedeutet, dass die Dateien nicht direkt von S3 bereitgestellt werden, sondern dass unser Server sie zuerst sicher liest und bereitstellt. Das wollen wir wirklich nicht :)
4. Überprüfen des Referrers
Die Lösung für verschleierte URLs kann verbessert werden, indem "sichergestellt" wird, dass die Anforderung von unserem Server stammt (Sie können S3 einrichten, um den Referrer zu überprüfen). Dies wäre jedoch eine sehr unzuverlässige Lösung, da nicht alle Browser die Referrer-Daten senden und diese auch gefälscht werden können.
Was ist eine gute Möglichkeit, Dateien aus Amazon S3 sicher für verschiedene Clients bereitzustellen?