flawopen.com/XSS в JavaScript/Svelte
Защищает ли Svelte от XSS по умолчанию?
Представьте `{comment}` как напечатанную записку: угловые скобки остаются видимым текстом. `{@html comment}` — это просьба к наборщику трактовать знаки на странице как инструкции разметки. Если они поступили из недоверенного источника, браузер может интерпретировать их как HTML и создать XSS.
<p>{@html comment}</p>
// значение интерпретируется как настоящая HTML-разметка
<p>{comment}</p>
// автоматически экранируется
Правило
Svelte компилирует обычный вывод {expression} как экранированный текст, поэтому значение не интерпретируется как HTML-разметка. Напротив, {@html} намеренно выводит строку HTML. Документация Svelte предупреждает: для предотвращения XSS значение нужно экранировать или контролировать. Считайте эту директиву чувствительной к безопасности точкой вставки HTML и используйте поддерживаемый санитайзер для форматированного текста от пользователей.
Как проверить код
Найдите `{@html}` в файлах `.svelte`. Для каждого совпадения проследите источник значения и все его преобразования. Считайте пользовательский ввод, внешние данные и сохранённый пользовательский контент недоверенными. Если нужен обычный текст, используйте `{expression}`. Если необходим HTML с форматированием, обработайте его поддерживаемым HTML-санитайзером и проверьте удаление запрещённой разметки.
grep -rn "{@html" --include="*.svelte" .HTML-разметка: сохраняйте границу санитизации
Используйте `{expression}`, если содержимое нужно показать как текст. Если пользователям нужно создавать HTML, санируйте готовое содержимое поддерживаемым HTML-санитайзером, например DOMPurify, перед передачей в `{@html}`. Не добавляйте к результату после санитизации другие данные и не изменяйте его: это может лишить защиту смысла. Своевременно обновляйте санитайзер и разрешайте только те элементы и атрибуты разметки, которые нужны продукту. Санитизация HTML не делает то же значение безопасным в контекстах JavaScript, CSS или URL.
Источники
- Документация Svelte — {@html ...}
- flawopen.com — XSS в JavaScript
- DOMPurify — project documentation
- OWASP — Cross Site Scripting Prevention