Защита загрузки изображений с использованием Node и AWS Lambda - PullRequest
0 голосов
/ 14 февраля 2019

Я выполняю загрузку изображений через форму браузера и работаю с AWS и NodeJS.Процесс заключается в том, что пользователь выбирает файл, предоставляет дополнительную информацию, и все это отправляется на сервер с помощью multipart/form-data.

Это прекрасно работает, поэтому полезная нагрузка проходит через шлюз API ---> Лямбда, и эта лямбда загружается в корзину S3.Я использую busboy для работы с многокомпонентными данными и в итоге получаю хороший объект JSON, содержащий все данные, отправленные из внешнего интерфейса, что-то вроде:

{
    userName: "Homer Simpson",
    file: base64endcoded_string,
}

Затем я беру это base64endcoded_stringи загрузить на S3, чтобы файл находился там, и я могу открыть его, загрузить и т. д.

Теперь, очевидно, я не доверяю никаким данным из внешнего интерфейса, и мне интересно, каков наилучший способ гарантировать, чтоотправляемый файл не является вредоносным.В этом случае мне нужно разрешить загружать только изображения, скажем, png, jpg / jpeg размером до 2 МБ.

Busboy дает мне тип MIME, кодировку и другие детали, но не уверен, достаточно ли это надежно или яследует использовать что-то вроде mmmagick или другое.Насколько безопасными и надежными будут эти решения?Любые указатели будут высоко оценены.

1 Ответ

0 голосов
/ 15 февраля 2019

В OWASP есть раздел на эту тему с некоторыми идеями. В любом случае я обнаружил, что лучший способ обезопасить загрузку изображения - это преобразовать его, и если вы можете преобразовать его, это изображение, и выубедитесь, что вся прикрепленная информация (код, скрытые данные и т. д.) удаляется в процессе преобразования, если вы не можете это сделать, это не изображение.

Еще одно преимущество заключается в том, что вы можете удалить информацию exif, добавить некоторые данные (водяные знаки, например) и т. д.

...