Хорошие меры безопасности при загрузке изображений клиента

Я делаю дизайнер одежды в React и Node JS, похожий на Spreadshirt

Это работает так: после того, как пользователь создал собственный продукт, готовые снимки экрана и (загруженные пользователем) изображения будут отправлены через smtp в виде вложений. Затем владелец веб-сайта загружал изображения и воссоздавал продукт в реальной жизни. Изображения необходимо загрузить, поэтому я хочу принять все меры предосторожности, чтобы сервер и владелец веб-сайта не были уязвимы.

Я подумал о 2 способах

  1. отправлять изображения в формате base64 (никогда не сохраняя их на самом сервере), а затем прикреплять из них вложение. Проблема, конечно, в том, что лимит запроса составляет 50 МБ.
  2. временно сохраняйте изображения в папке, а не передавайте их в виде вложений и в конце удаляйте (даже если запрос по какой-то причине не удался)

Конечно, я бы проверял тип изображения перед отправкой (разрешены только jpg и png), а Gmail сам сканирует каждое вложение на наличие вредоносного ПО.

Будет ли этой меры достаточно? Любая передовая практика или совет? Чего мне следует избегать? Заранее спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В целом ваш подход к загрузке изображений и обеспечению безопасности является правильным. Вот мои мысли по этому поводу:

Способ 1: отправка изображений в формате Base64 Отправка изображений в виде строк в кодировке Base64 без сохранения их на сервере имеет свои плюсы и минусы:

Плюсы:

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

Минусы:

Ограничения по размеру. Поставщики электронной почты, такие как Gmail, имеют ограничения на размер вложений. Кодировка Base64 увеличивает размер примерно на 33%.

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

Способ 2: временное сохранение и потоковая передача изображений Временное сохранение изображений и последующая их потоковая передача в виде вложений электронной почты — более масштабируемый подход:

Плюсы:

Масштабируемость: этот метод обрабатывает большие изображения более эффективно, чем кодирование base64.

Производительность: потоковая передача вложений требует меньше ресурсов, чем кодирование в base64.

Минусы:

Риски безопасности. Временное хранилище представляет собой риск, если им не правильно управлять. Гарантировать, что: Изображения хранятся в безопасном изолированном каталоге. Разрешения на доступ строго контролируются. Изображения удаляются сразу после обработки, даже в случае ошибок.

Дополнительные рекомендации:

Проверка и очистка входных данных: проверка и очистка всех загруженных изображений для предотвращения атак путем внедрения. Разрешайте только определенные типы файлов (JPG, PNG) и устанавливайте ограничения на размер (OWASP).

Безопасное хранилище файлов: используйте безопасный изолированный каталог для временного хранения. Убедитесь, что доступ к этим файлам имеют только авторизованные процессы (NIST).

Безопасность электронной почты: используйте SMTP-сервер с надежными настройками безопасности, включая шифрование TLS и сканирование вредоносных программ на наличие вложений (Средний).

Регулярные проверки безопасности: проводите регулярные проверки безопасности и тестирование на проникновение для выявления и устранения потенциальных уязвимостей (OWASP).

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

Использованная литература:

НИСТ. Средства контроля безопасности и конфиденциальности для информационных систем и организаций.

ОВАСП. Практика безопасного кодирования OWASP.

Средний. Исследование глубины уязвимостей безопасности SMTP: всестороннее исследование.

Привет. Спасибо за ответ, именно то, что я искал. Ссылки отличные, я сделаю хорошее глубокое погружение. Когда дело доходит до первого метода, изображения будут отправляться с клиента как изображение base64 и отправляться прикрепленными как изображение base64.

Petar 07.06.2024 10:53

Спасибо за ваш отзыв! Отправка изображений base64 от клиента является допустимым подходом. Просто имейте в виду совместимость, ограничения и требования к обработке.

murali k 07.06.2024 12:36

Другие вопросы по теме