При загрузке файла в AWS-S3, как лямбда-функция может запретить операцию PutObject, если ключ объекта уже существует в корзине? - PullRequest
0 голосов
/ 30 апреля 2019

Я только что понял, что если я позволю браузеру загрузить файл в мое хранилище S3 (используя токен сеанса с моего сервера), злоумышленник может использовать известные объектные ключи, чтобы использовать эти временные разрешения для перезаписи этих файлов (илибо заменить вредоносным, либо пустым содержимым.)

Некоторые говорят, что решение будет заключаться в использовании контроля версий объектов, но мне интересно, может ли лямбда-функция перехватить этот запрос PutObject, проверьте, существует ли ключ в корзинеи, если так, откажитесь от операции.

1 Ответ

0 голосов
/ 01 мая 2019

Короткий ответ - нет.

Это потому, что S3 в конечном итоге согласован. Даже если вы сделали что-то умное, например попытались getObject проверить, существует ли файл, вы вполне можете получить ложный минус при тяжелой скорострельной нагрузке, которую вы ожидаете от атакующего.

Если вы хотите убедиться, что подписанный URL-адрес может использоваться один раз и только один раз, вам придется заменить функциональность подписанного URL-адреса своей собственной. Примером может быть использование API Gateway + Lambda + DynamoDB. В этом случае вы должны создать «токен загрузки», который вы сохраните в DynamoDB и вернете пользователю. Когда пользователь затем загружает файл с помощью токена, он удаляется из DynamoDB (что можно сделать немедленно согласованным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...