alex_shevch
@alex_shevch
Frontend Developer

Как безопасно загрузить SVG на сайт?

Необходимо добавить на сайт возможность пользователям загружать SVG изображения. Есть ли какой-то способ безопасно загружать SVG, чтобы в него не могли встроить вредоносный код?
  • Вопрос задан
  • 820 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега PHP
♬♬
«Большие дяди» размещают загруженные пользователями SVG'шки на отдельном (под)домене.

Например, wikipedia держит их на upload.wikimedia.org

Какой бы скрипт там ни был зашит в загружаемые SVG, его выполнение ничего не даст злодею, т.к. Same Origin Policy браузеров держит его в отдельной песочнице и не даёт доступа к содержанию и кукам основного сайта.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
К сожалению, в этом плане мы отданы на милость производителю браузера — как, впрочем, и в PNG, и в JPG. С одной стороны, они стараются избавиться от ошибок — например, как-то были скрипты в SVG (вроде в классической Опере). Исправили.
С другой — векторная графика на порядок сложнее точечной, и всё не предусмотришь.

Я бы поделил это на три части.
1. Типичные для XML риски.
• Entity-бомбы.
• Проблемы с DTD, особенно отсылки на локальные файлы и файлы-устройства.
• Сильно вложенные тэги, призванные пробить врагу стек. С этим надо быть предельно осторожным, чтобы не пробить стек себе :)

2. Известные эксплойты, связанные с SVG.
• Скрипты (и кто их вообще исполняет сейчас в SVG — но интернет говорит, что немало таких зловредов).
UPD. Исполняют, но при определённых условиях, и тэг IMG или фон через CSS теоретически безопасны.

3. SVG, которые не могут работать.
• Ссылка на внешний растровый файл.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@4iloveg
Full-Stack HTML Developer
Попробуй парсить загружаемый svg на наличие нестандартного для svg кода. И при нахождении оного останавливать работу по загрузке на сайт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽