Ich habe eine App, die Benutzerdateien auf S3 hochlädt. Im Moment ist die Zugriffssteuerungsliste für die Ordner und Dateien auf privat festgelegt.
Ich habe eine db-Tabelle (docs genannt) erstellt, die folgende Informationen speichert:
%Vor%Wenn also ein Benutzer eine Datei herunterladen möchte, checke ich zuerst in der db-Tabelle ein, dass er Zugriff auf die Datei hat. Ich würde es vorziehen, wenn die Datei nicht zuerst auf meinen Server heruntergeladen und dann an den Benutzer gesendet wird - ich möchte, dass sie die Datei direkt von Amazon abrufen können.
Ist es in Ordnung, sich auf einen sehr langen Hashnamen zu verlassen (was es im Prinzip unmöglich macht, einen Dateinamen zufällig zu erraten)? In diesem Fall kann ich die ACL für jede Datei auf public-read setzen.
Oder gibt es andere Optionen, die ich verwenden kann, um die Dateien zu bedienen, während sie privat bleiben?
Denken Sie daran, dass, sobald der Link da draußen ist, nichts daran hindert, dass ein Benutzer diesen Link mit anderen teilen kann. Andererseits hindert nichts den Benutzer daran, die Datei anderswo zu speichern und einen Link zu der Kopie der Datei zu teilen.
Der beste Ansatz hängt von Ihren spezifischen Bedürfnissen ab.
Option 1 - Zeitbeschränkte Download-URL
Falls für Ihr Szenario zutreffend, können Sie auch ablaufende (zeitlich begrenzte) benutzerdefinierte Links zu den S3-Inhalten erstellen. Das würde dem Benutzer ermöglichen, Inhalte für eine begrenzte Zeit herunterzuladen, nach der sie einen neuen Link erhalten müssten.
Option 2 - Verschleierte URL
Wenn Sie Wert darauf legen, die Datei nicht über Ihren Webserver laufen zu lassen, weil das Risiko besteht, dass eine URL, egal ob unklar, absichtlich geteilt wird, verwenden Sie den schwer zu erratenden Linknamen. Dies würde es einem Link erlauben, "für immer" gültig zu bleiben, was bedeutet, dass der Link "für immer" geteilt werden kann.
Option 3 - Laden Sie über Ihren Server herunter
Wenn Sie Bedenken haben, dass der Link freigegeben wird und Nutzer sich sicher über Ihre Website authentifizieren möchten, können Sie den Inhalt über Ihre Website nach der Überprüfung der Benutzeranmeldeinformationen bereitstellen.
Diese Option ermöglicht auch, dass der Link "für immer" gültig bleibt, aber der Benutzer sich anmelden muss (oder vielleicht nur einen Authentifizierungscookie im Browser hat), um auf den Link zuzugreifen.
Ich möchte nur die PHP-Lösung mit Code veröffentlichen, wenn jemand das gleiche Problem hat.
Hier ist der Code, den ich benutzt habe:
%Vor%