Пользователи моего приложения загружают свои файлы в одно ведро. Как я могу гарантировать, что каждый объект в моем ведре S3 имеет уникальный ключ, чтобы предотвратить перезапись объектов?
На данный момент я шифрую имена файлов со случайной строкой в своем php-скрипте перед отправкой файла на S3.
Ради обсуждения давайте предположим, что загрузчик находит способ манипулировать именем файла при загрузке. Он хочет заменить все изображения на моем сайте изображением банана . Каков хороший способ предотвратить перезапись файлов на S3, если сбой шифрования?
Изменить: я не думаю, что управление версиями будет работать, потому что я не могу указать идентификатор версии в URL-адресе изображения при отображении изображений из моего ковша.
Вы шифруете или хешируете? Если вы используете хэши md5 или sha1, злоумышленник может легко найти хеш-коллизию и заставить вас скользить по банановой коже. Если вы шифруете без случайного вектора инициализации, злоумышленник может вывести ваш ключ после загрузки нескольких сотен файлов, а шифрование, вероятно, не самый лучший подход. Это вычислительно дорого, сложно реализовать, и вы можете получить более безопасный механизм для этой работы с меньшими усилиями.
Если вы добавляете случайную строку к каждому имени файла, используя достаточно надежный источник энтропии, у вас не должно быть никаких проблем, но вы должны проверить, существует ли файл в любом случае. Хотя кодирование цикла для проверки, использование S3::GetObject
и генерация новой случайной строки может показаться большим усилием для чего-то, что почти никогда не нужно запускать, «почти никогда» означает, что он имеет высокую вероятность в конечном итоге.
Проверка файла с таким именем перед его загрузкой будет работать.
Если файл уже существует, повторно рандомизируйте имя файла и повторите попытку.