Перейти к содержимому
ФреймворкJavaScript

Sanitizer API: как очищается контент

Очистка HTML-контента для защиты от XSS-атак. В static get sanitize() инструмента поле данных можно сопоставить со строкой 'plaintext' вместо карты тегов. Это помечает поле как литеральный исходный текст, а не разметку.

Обновлено 8 сент. 2026 г.Редактировать на GitHub

Как получить экземпляр редактора

Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.

TypeScript
// 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 по набору правил перед вставкой внешнего контента. Это ваша защита при вставке и импорте строк.

TypeScript
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.

TypeScript
// 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
    };
  }
}