Задать вопрос
alex_shevch
@alex_shevch
Frontend Developer

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

Необходимо добавить на сайт возможность пользователям загружать SVG изображения. Есть ли какой-то способ безопасно загружать SVG, чтобы в него не могли встроить вредоносный код?
  • Вопрос задан
  • 858 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 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 кода. И при нахождении оного останавливать работу по загрузке на сайт.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы