Meine App-Nutzer laden ihre Dateien in einen Bucket hoch. Wie kann ich sicherstellen, dass jedes Objekt in meinem S3-Bucket einen eindeutigen Schlüssel hat, um zu verhindern, dass Objekte überschrieben werden?
Im Moment verschlüssele ich Dateinamen mit einer zufälligen Zeichenfolge in meinem PHP-Skript, bevor ich die Datei an S3 sende.
Für die Diskussion nehmen wir an, dass der Uploader einen Weg findet, den Dateinamen beim Upload zu manipulieren. Er möchte alle Bilder auf meiner Seite durch ein Bild einer Banane ersetzen. Was ist ein guter Weg, um das Überschreiben von Dateien in S3 zu verhindern, wenn die Verschlüsselung fehlschlägt?
Bearbeiten: Ich glaube nicht, dass die Versionierung funktioniert, da ich bei der Anzeige von Bildern aus meinem Bucket keine Versions-ID in einer Bild-URL angeben kann.
Verschlüsseln oder Hashing? Wenn Sie md5- oder sha1-Hashes verwenden, kann ein Angreifer leicht eine Hash-Kollision finden und Sie auf eine Bananenschale rutschen lassen. Wenn Sie ohne einen zufälligen Initialisierungsvektor verschlüsseln, kann ein Angreifer nach dem Hochladen einiger hundert Dateien möglicherweise Ihren Schlüssel ableiten, und die Verschlüsselung ist wahrscheinlich nicht der beste Ansatz. Es ist rechenintensiv, schwierig zu implementieren, und Sie können einen sichereren Mechanismus für diesen Job mit weniger Aufwand erhalten.
Wenn Sie jedem Dateinamen eine zufällige Zeichenfolge voranstellen und dabei eine relativ zuverlässige Entropiequelle verwenden, sollten Sie keine Probleme haben, aber Sie sollten prüfen, ob die Datei ohnehin existiert. Obwohl das Programmieren einer zu überprüfenden Schleife mit S3::GetObject
und das Generieren einer neuen zufälligen Zeichenfolge für eine Aufgabe, die fast nie ausgeführt werden muss, sehr mühsam erscheinen mag, bedeutet "fast nie", dass die Wahrscheinlichkeit sehr hoch ist / p>
Das Überprüfen einer Datei mit diesem Namen vor dem Hochladen würde funktionieren.
Wenn die Datei bereits existiert, wählen Sie den Dateinamen erneut und versuchen Sie es erneut.
Tags und Links php amazon-s3 amazon-web-services file-upload file