Если вы не читали адвент-календарь HTMHell, то могли и пропустить интересности!
Во втором дне календаря 2025 года речь идёт о теге
<plaintext>. Это устаревший элемент, который запрещён стандартами, но до сих пор поддерживается браузерами. Штука гениальная: как только браузер встречает
<plaintext>, он прекращает разбор HTML. Всё, что идёт дальше, воспринимается как обычный текст, независимо от того, что там написано.
<body>
<h1>Заголовок</h1>
<plaintext>
<div>Этот div не станет элементом</div>
<script>alert('xss')</script>
</body>
В браузере и
<div>, и <script> будут выведены как текст. DOM на этом месте обрывается, ошибок в консоли нет, с точки зрения браузера всё произошло корректно.Существенная часть статьи посвящена тому, как
<plaintext> ведёт себя при санитайзинге HTML. Разные санитайзеры обрабатывают его по-разному: кто-то удаляет, кто-то экранирует, кто-то оставляет в форме, которая всё равно влияет на парсинг. В результате один и тот же входной HTML после «очистки» может либо работать нормально, либо полностью ломать страницу. Например, обнулить CSP.
Короче, можно долго растекаться по поводу того, зачем знать всю эту вот подноготную истории веба, но такие штуки кажутся весьма забавными. Почитайте, там интересно.
#html #sanitize
