Sanitizer API: как очищается контент
Очистка HTML-контента для защиты от XSS-атак. В `static get sanitize()` инструмента поле данных можно сопоставить со строкой `'plaintext'` вместо карты тегов — это помечает поле как литеральный исходный текст, а не разметку.
Как получить экземпляр редактора
Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;
// Call any API method on it.
editor.caret.setToLastBlock('end');Методы
sanitizer.clean(taintString, config)
stringОчистить HTML-строку по переданной конфигурации санитайзера. Записи `'plaintext'` — это директивы уровня поля, а не правила для тегов, поэтому `clean()` отфильтровывает их из конфигурации до разбора. Внесение `href`/`src` в список разрешённых разрешает сам атрибут, а не его схему — `clean()` дополнительно отбрасывает URL-значения, которые могут выполниться (`javascript:`, `data:text/html`, `data:image/svg+xml`), поэтому разрешённая ссылка никогда не вернётся живой ссылкой на скрипт.
Когда использовать
Удаляет нежелательный HTML по набору правил перед вставкой внешнего контента — защита при вставке и импорте строк.
const dirtyHtml = '<script>alert("xss")</script><p>Hello</p>';
const clean = editor.sanitizer.clean(dirtyHtml, {
p: true, // Allow <p> tags
b: true // Allow <b> tags
});
// Returns: '<p>Hello</p>' (script tag removed)
const link = editor.sanitizer.clean('<a href="javascript:alert(1)">x</a>', { a: { href: true } });
// Returns: '<a>x</a>' (executable scheme dropped, text kept)Свойства
| Свойство | Тип | Описание |
|---|---|---|
plaintext | 'plaintext' | Правило санитайзера уровня поля, которое инструмент объявляет в `static get sanitize()`, и часть объединения `SanitizerRule`, экспортируемого из корня пакета. Очистка — это разбор HTML: она кодирует одиночные `<`/`&` в сущности и отбрасывает текст, похожий на непарный закрывающий тег, — невосстановимая порча для поля, хранящего литеральный исходный текст, например `code` у блока кода. Поле, помеченное `'plaintext'`, пропускает очистку тегов, проход по схемам URL и глобальный санитайзер уровня редактора и проходит цикл туда-обратно байт в байт. Оно объявлено обычным строковым литералом, а не Symbol, поэтому конфигурации sanitize у инструментов переживают JSON и `structuredClone`. |
// A tool declares which of its data fields are markup and which are literal text
class CodeTool {
static get sanitize() {
return {
code: 'plaintext', // literal source — never HTML-parsed
caption: { b: true, i: true } // markup — sanitized against these tags
};
}
}