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' | Правило санитайзера уровня поля, которое инструмент объявляет в Очистка это разбор HTML: она кодирует одиночные Поле, помеченное |
// 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
};
}
}