iziToast — это легковесная библиотека для отображения уведомлений в браузере на JavaScript. Одной из ключевых возможностей является использование HTML-контента внутри уведомлений, что позволяет создавать гибкие и визуально богатые сообщения. Однако работа с HTML требует осторожности, чтобы избежать уязвимостей типа XSS (Cross-Site Scripting).
В iziToast можно использовать параметр message для
вставки текста, а параметр messageColor и
titleColor для стилизации. Для включения HTML-контента
используется опция message с HTML-тегами:
iziToast.show({
title: 'Уведомление',
message: '<b>Важное сообщение:</b> проверьте данные',
timeout: 5000,
position: 'topRight'
});
В этом примере <b> делает текст жирным. Также
можно использовать ссылки, списки и другие HTML-элементы:
iziToast.show({
title: 'Список задач',
message: '<ul><li>Задача 1</li><li>Задача 2</li></ul>',
timeout: 4000,
position: 'bottomLeft'
});
Прямое использование пользовательского ввода в параметре
message без обработки создаёт риск XSS. Например, если
передавать в message строки, полученные от пользователя,
злоумышленник может вставить скрипт:
let userInput = '<img src=x oner ror=alert("XSS")>';
iziToast.show({
title: 'Ошибка',
message: userInput
});
Такой код выполнит JavaScript на стороне клиента, что опасно.
Для предотвращения XSS необходимо очищать HTML-контент перед отображением. Существует несколько подходов:
<script> и атрибутов с
обработчиками событий. Можно использовать регулярные выражения
или сторонние библиотеки вроде DOMPurify:let cleanHTML = DOMPurify.sanitize(userInput);
iziToast.show({
title: 'Безопасное сообщение',
message: cleanHTML
});
< в <, > в
> позволяет отобразить текст без интерпретации
тегов:function escapeHTML(str) {
return str.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
let safeMessage = escapeHTML(userInput);
iziToast.show({
title: 'Безопасное сообщение',
message: safeMessage
});
Хотя iziToast не предоставляет встроенного параметра
allowHtml, вставка HTML осуществляется через
message. Для безопасной работы рекомендуется:
message.onclick, onerror и т.д.) в HTML.Пример безопасного уведомления с разрешённым HTML:
let userMessage = '<b>Привет</b>, <i>мир</i>!';
let safeMessage = DOMPurify.sanitize(userMessage, {ALLOWED_TAGS: ['b','i']});
iziToast.show({
title: 'Сообщение',
message: safeMessage,
timeout: 3000,
position: 'topRight'
});
В этом случае сохраняется форматирование <b> и
<i>, но все опасные элементы удалены.
Использование HTML в iziToast открывает широкие возможности для стилизации и форматирования уведомлений, но требует строгой санитизации данных. Комбинация библиотек для очистки контента и ограниченного набора тегов позволяет создавать визуально привлекательные уведомления без угроз безопасности.