Amazon S3 erstellen von eindeutigen Schlüsseln für jedes Objekt
Meine app-Nutzer laden Ihre Dateien auf einem Eimer. Wie kann ich sicherstellen, dass jedes Objekt in meinem S3-bucket hat einen eindeutigen Schlüssel, um zu verhindern, dass sich Objekte nicht überschrieben werden?
Im moment bin ich Dateinamen verschlüsseln mit einem random string in mein php-Skript vor dem senden der Datei zu S3.
Zum Wohle der Diskussion nehmen wir an, dass der uploader einen Weg findet, zu manipulieren, die mit dem Namen auf hochladen. Er will Sie ersetzen Sie alle Bilder auf meiner Website mit einem Bild von einem Banane. Was ist ein guter Weg, um zu verhindern überschreiben von Dateien in S3, wenn die Verschlüsselung fehlschlägt?
Edit: ich glaube nicht, dass die Versionierung funktioniert, denn ich kann nicht geben Sie eine version-id in eine Bild-URL bei der Anzeige von Bildern aus meinem Eimer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie die Verschlüsselung oder hashing? Wenn Sie md5-oder sha1-hashes), kann ein Angreifer leicht eine hash-Kollision und machen Sie gleiten auf einer Bananenschale. Wenn Sie die Verschlüsselung verwenden, ohne einen zufälligen Initialisierungsvektor, könnte ein Angreifer in der Lage sein, um daraus Ihren Schlüssel nach dem hochladen ein paar hundert Dateien, und die Verschlüsselung ist wahrscheinlich nicht der beste Ansatz. Es ist rechnerisch teuer, schwer zu implementieren, und man kann ein sicherer Mechanismus für diesen job mit weniger Aufwand.
Wenn Sie prepend eine zufällige Zeichenfolge, die jeder mit dem Namen, mit einer halbwegs zuverlässigen Quelle von Entropie, sollten Sie nicht irgendwelche Probleme, aber Sie sollten überprüfen, ob die Datei bereits existiert trotzdem. Obwohl die Codierung einer Schleife zu überprüfen, mithilfe
S3::GetObject
und generiert eine neue random-string könnte scheinen, wie viel Aufwand für etwas, das fast nie ausführen zu müssen, "fast nie" bedeutet, dass es eine hohe Wahrscheinlichkeit hat, geschieht schließlich.openssl_random_pseudo_bytes()
.Prüfung für eine Datei mit diesem Namen vor dem hochladen ... es funktionieren würde.
Wenn die Datei bereits vorhanden ist, re-randomisieren der name der Datei, und versuchen Sie es erneut.