HTML Sanitizer API: браузер наконец-то сам почистит ваш мусор, но вы всё равно будете писать регулярки

В браузеры завезли нативный санитайзер — теперь можно не бояться XSS, но старые привычки умрут не скоро.
Наконец-то свершилось: W3C решил, что хватит пилить велосипеды на коленке, и анонсировал HTML Sanitizer API. Теперь браузер сам будет выкидывать опасные теги из пользовательского контента, а мы — меньше плакать по ночам из-за XSS-уязвимостей.
Что это вообще такое?
По сути, это встроенный в браузер метод sanitize(), который на вход принимает строку с HTML, а на выходе даёт безопасный DOM. Никаких больше DOMPurify с его 50 КБ минифицированного кода — теперь всё из коробки. Правда, пока API только в статусе черновика, и Chrome уже начал эксперименты, а Firefox и Safari традиционно молчат в тряпочку.
Как это работает:
- Вы создаёте экземпляр
Sanitizerс настройками — какие теги резать, какие атрибуты банить. - Вызываете
sanitize(input)— и получаете чистыйDocumentFragment. - Вставляете в DOM без страха, что кто-то уведёт куки.
Звучит как мечта фронтендера, да? Но есть нюанс: старые браузеры не умрут завтра, а значит, полифилы и старый добрый innerHTML с фильтрацией останутся с нами ещё лет пять. Плюс сам API пока сырой — например, нельзя задать свои правила для CSP.
А что с производительностью?
По замерам авторов спецификации, нативный санитайзер работает в 2–5 раз быстрее, чем DOMPurify, потому что не таскает за собой парсер на JavaScript. Для Single Page Application с кучей динамического контента это может быть существенно — меньше дёрганий сборщика мусора, больше счастья пользователя.
Комментарий студии METABYTE: Мы, конечно, рады, что браузеры наконец-то взялись за ум, но пока API дойдёт до стабильного статуса, наши разработчики успеют написать ещё пару десятков тысяч строк кода на React. Хорошо, что мы уже используем DOMPurify — привычка, от которой не хочется отказываться, даже если браузер подсуетился.