URL-адрес, предварительно назначенный Amazon S3 — аннулировать вручную или загрузить один раз

Я использую S3, чтобы принимать прямые загрузки от пользователя на S3. Поэтому я буду использовать предварительно подписанные URL-адреса.

После успешной загрузки AWS Lambda удостоверится, что загружаемый файл является изображением, а затем клиент сообщит моему серверу, что он завершил загрузку.

Затем мой сервер проверит, существует ли этот файл в S3 (если Lambda обнаруживает недопустимое изображение, он удаляет его). Если это произойдет, то будет следовать остальная логика приложения.

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

Лямбда все равно удалит файл, но теперь мой сервер будет думать, что файл существует, а на самом деле его нет.

Есть ли способ сгенерировать одноразовую загрузку предварительно подписанного URL-адреса или возможно принудительно аннулировать URL-адрес, который был создан, но еще не истек?

6

Решение

Превращая это в ответ …

Как только файл загружен, пусть Lambda переместит его (используя API копирования объектов), то есть из uploads/123.png в received/123.png или что-то подобное.

Если злонамеренный пользователь попытается повторно использовать подписанный URL, он перейдет к uploads/123.png, В худшем случае, Lambda проверяет это снова и отклоняет новый файл. Так как ваш сервер смотрит в received/ вместо uploads/ для обработки файлов мы сделали вещи безопасными.

3

Другие решения

предварительно подписанный URL истекает в установленную дату / время. это невозможно для создания единовременного использования предварительно подписанного URL.

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

4

По вопросам рекламы [email protected]