Я делаю дизайнер одежды в React и Node JS, похожий на Spreadshirt
Это работает так: после того, как пользователь создал собственный продукт, готовые снимки экрана и (загруженные пользователем) изображения будут отправлены через smtp в виде вложений. Затем владелец веб-сайта загружал изображения и воссоздавал продукт в реальной жизни. Изображения необходимо загрузить, поэтому я хочу принять все меры предосторожности, чтобы сервер и владелец веб-сайта не были уязвимы.
Я подумал о 2 способах
Конечно, я бы проверял тип изображения перед отправкой (разрешены только jpg и png), а Gmail сам сканирует каждое вложение на наличие вредоносного ПО.
Будет ли этой меры достаточно? Любая передовая практика или совет? Чего мне следует избегать? Заранее спасибо!
В целом ваш подход к загрузке изображений и обеспечению безопасности является правильным. Вот мои мысли по этому поводу:
Способ 1: отправка изображений в формате Base64 Отправка изображений в виде строк в кодировке Base64 без сохранения их на сервере имеет свои плюсы и минусы:
Плюсы:
Отсутствие постоянного хранилища. Этот метод позволяет избежать необходимости хранить изображения на вашем сервере, что снижает риск уязвимостей серверного хранилища.
Минусы:
Ограничения по размеру. Поставщики электронной почты, такие как Gmail, имеют ограничения на размер вложений. Кодировка Base64 увеличивает размер примерно на 33%.
Производительность. Кодирование и декодирование изображений в формате Base64 может быть ресурсоемким, что потенциально влияет на производительность.
Способ 2: временное сохранение и потоковая передача изображений Временное сохранение изображений и последующая их потоковая передача в виде вложений электронной почты — более масштабируемый подход:
Плюсы:
Масштабируемость: этот метод обрабатывает большие изображения более эффективно, чем кодирование base64.
Производительность: потоковая передача вложений требует меньше ресурсов, чем кодирование в base64.
Минусы:
Риски безопасности. Временное хранилище представляет собой риск, если им не правильно управлять. Гарантировать, что: Изображения хранятся в безопасном изолированном каталоге. Разрешения на доступ строго контролируются. Изображения удаляются сразу после обработки, даже в случае ошибок.
Дополнительные рекомендации:
Проверка и очистка входных данных: проверка и очистка всех загруженных изображений для предотвращения атак путем внедрения. Разрешайте только определенные типы файлов (JPG, PNG) и устанавливайте ограничения на размер (OWASP).
Безопасное хранилище файлов: используйте безопасный изолированный каталог для временного хранения. Убедитесь, что доступ к этим файлам имеют только авторизованные процессы (NIST).
Безопасность электронной почты: используйте SMTP-сервер с надежными настройками безопасности, включая шифрование TLS и сканирование вредоносных программ на наличие вложений (Средний).
Регулярные проверки безопасности: проводите регулярные проверки безопасности и тестирование на проникновение для выявления и устранения потенциальных уязвимостей (OWASP).
Я бы рекомендовал потоковую передачу с надлежащей реализацией и мерами безопасности для эффективной и безопасной обработки больших изображений.
Использованная литература:
НИСТ. Средства контроля безопасности и конфиденциальности для информационных систем и организаций.
ОВАСП. Практика безопасного кодирования OWASP.
Средний. Исследование глубины уязвимостей безопасности SMTP: всестороннее исследование.
Спасибо за ваш отзыв! Отправка изображений base64 от клиента является допустимым подходом. Просто имейте в виду совместимость, ограничения и требования к обработке.
Привет. Спасибо за ответ, именно то, что я искал. Ссылки отличные, я сделаю хорошее глубокое погружение. Когда дело доходит до первого метода, изображения будут отправляться с клиента как изображение base64 и отправляться прикрепленными как изображение base64.