HTML и безопасность
Markdown допускает сырой HTML в исходнике, и LibreTimes сохраняет его контролируемое подмножество. Всё, что рендерит документ – и порождённое Markdown, и написанное руками, – проходит санитизацию по принципу списка разрешённого: что не разрешено явно, то удаляется.
Сырой HTML, которым можно пользоваться
Синтаксис Markdown покрывает почти всё, так что сырой HTML нужен редко. Полезные разрешённые случаи:
| Элемент | Зачем писать |
|---|---|
<details> / <summary> | сворачиваемая секция; тот же результат, что у директивы spoiler |
<sub> / <sup> | индексы, эквивалент ~x~ / ^x^ |
<mark> | выделение, эквивалент ==x== |
<kbd> | клавиши: Ctrl+K |
<table>, <thead>, <tbody>, <tr>, <th>, <td> | таблицы, которым нужны rowspan/colspan сверх синтаксиса GFM |
<img width="..." height="..."> | изображение с явными размерами |
<br>, <hr>, <blockquote>, <dl>/<dt>/<dd> | стандартная структура, эквивалент Markdown-форм |
Стандартные строчные и блочные элементы (<b>, <i>, <em>, <strong>,
<code>, <pre>, <p>, <ul>, <ol>, <li>, заголовки и подобное) тоже
разрешены – ради читаемости предпочитайте Markdown-формы.
Что удаляет санитизация
- Скрипты и обработчики:
<script>,<style>и все атрибуты событийon*. Выполнить код из документа нельзя. - Опасные URL:
hrefвнеhttps/http/mailtoиsrcизображений внеhttps/http(никакихjavascript:, никакихdata:). - Фреймы:
<iframe>выживает только в виде, который порождают видеовставки, сsrc, ограниченнымyoutube-nocookie.comиplayer.vimeo.com. Любой другой фрейм удаляется целиком. - Произвольные стили: атрибуты
style, с точечным исключением для размеров видеоплеера. Документ не может перекрасить страницу вокруг себя. - Всё неперечисленное:
<form>,<input>,<object>,<embed>,<canvas>, кастомные элементы – удаляются, как и неперечисленные атрибуты на разрешённых элементах.
Удаление происходит молча: запрещённый узел исчезает со страницы, а не порождает ошибку.
Замечания авторам
id, написанные в сыром HTML, в выводе получают префиксuser-content-(стандартная защита от подмены DOM). Якоря заголовков генерируются сами, так что своиidнужны редко.- Если что-то из написанного не появилось на странице, вероятнее всего это срезала санитизация. Сверьтесь со списками на этой странице; Markdown-форма той же конструкции – обычно и есть ответ.
- Санитизация не заменяет суждения о содержании – она останавливает код, а не утверждения. Нормы сообщества – политика допустимого использования.