FlawOpen

flawopen.com/XSS/Загрузка SVG

Опасна ли загрузка SVG из-за XSS?

Справочная страница
Краткий ответ

Загруженный SVG — это документ, а не просто пиксели: он может содержать активные элементы, например скрипты и обработчики событий. Выполнение зависит от контекста браузера. В <img> действует ограниченный режим; встроенный в страницу SVG, прямое открытие или включение как документа могут быть активными.

Чем SVG отличается от других форматов изображений

В отличие от PNG и JPEG, SVG — это XML, который может содержать активное содержимое. Браузеры отключают сценарии в ограниченных контекстах изображений, например <img>, но не при прямом открытии SVG, встраивании как документа через <object>, <iframe> или <embed>, а также при вставке разметки inline. Загруженное изображение профиля может стать stored XSS, если приложение отдаёт его в активном контексте под своим origin. Поведение зависит от контекста; расширение и MIME не очищают содержимое.

Как безопасно обрабатывать загрузки

Часто задаваемые вопросы

Достаточно проверить расширение или MIME-тип?

['Достаточно проверить расширение или MIME-тип?', 'Нет. Расширение и заявленный MIME — это метаданные, а не проверка активного содержимого. Проверьте реальный формат, затем примените SVG-санитайзер со списком разрешённого или преобразуйте файл в растр, если функции SVG не нужны.']

Источники

См. также XSS (межсайтовый скриптинг, CWE-79): как он работает и как его предотвратить в любом языке — flawopen.com Риск XSS при использовании Vue v-html WKWebView: безопасен ли HTML? Отражённый, хранимый и DOM-based XSS: в чём разница? Риски безопасности addJavascriptInterface в Android Защита Angular от XSS: безопасные значения и обходные API XSS из-за MIME sniffing: Content-Type и nosniff