Comments 1
Да, бороться с XSS одной лишь санацией пользовательского ввода - путь тупиковый.
Ваш вариант с ифреймом - красивое решение, но если родительский документ опубликует свою CSP, ваш ифрейм её унаследует. И, если родительская CSP более строгая, она заблокирует весь рендеринг SVG (отключит img-src и style-src из мета тега) или ифрейм целиком.
Недостаточно защищать от XSS только вставку SVG, надо защищать весь сайт / приложение.
CSP default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline' data:; и пусть вставляют свои SVG без санации. За границы сайта запросы не уйдут.
Более того, при вставке SVG можно перехватывать событие securitypolicyviolation и давать адекватную диагностику: “скрипты не поддерживаются в SVG” / “обработчики событий не поддерживаются в SVG” / “внешние картинки не поддерживаются”. Тогда пользователь будет знать, почему его супер-пупер картинка не работает как он хотел.
Проблемы санации SVG