Amazon S3 создает уникальные ключи для каждого объекта

Пользователи моего приложения загружают свои файлы в одно ведро. Как я могу гарантировать, что каждый объект в моем ведре S3 имеет уникальный ключ, чтобы предотвратить перезапись объектов?

На данный момент я шифрую имена файлов со случайной строкой в ​​своем php-скрипте перед отправкой файла на S3.

Ради обсуждения давайте предположим, что загрузчик находит способ манипулировать именем файла при загрузке. Он хочет заменить все изображения на моем сайте изображением банана . Каков хороший способ предотвратить перезапись файлов на S3, если сбой шифрования?

Изменить: я не думаю, что управление версиями будет работать, потому что я не могу указать идентификатор версии в URL-адресе изображения при отображении изображений из моего ковша.

Solutions Collecting From Web of "Amazon S3 создает уникальные ключи для каждого объекта"

Вы шифруете или хешируете? Если вы используете хэши md5 или sha1, злоумышленник может легко найти хеш-коллизию и заставить вас скользить по банановой коже. Если вы шифруете без случайного вектора инициализации, злоумышленник может вывести ваш ключ после загрузки нескольких сотен файлов, а шифрование, вероятно, не самый лучший подход. Это вычислительно дорого, сложно реализовать, и вы можете получить более безопасный механизм для этой работы с меньшими усилиями.

Если вы добавляете случайную строку к каждому имени файла, используя достаточно надежный источник энтропии, у вас не должно быть никаких проблем, но вы должны проверить, существует ли файл в любом случае. Хотя кодирование цикла для проверки, использование S3::GetObject и генерация новой случайной строки может показаться большим усилием для чего-то, что почти никогда не нужно запускать, «почти никогда» означает, что он имеет высокую вероятность в конечном итоге.

Проверка файла с таким именем перед его загрузкой будет работать.

Если файл уже существует, повторно рандомизируйте имя файла и повторите попытку.