escapeMarkup — это опция в библиотеке
Toastify для JavaScript, которая определяет, как
библиотека обрабатывает HTML-содержимое уведомления. По умолчанию
Toastify экранирует все HTML-теги, предотвращая
выполнение потенциально опасного кода. Однако для сложных уведомлений с
HTML-разметкой требуется явное управление этой функциональностью.
Опция задается при создании уведомления через объект настроек:
Toastify({
text: "<strong>Важное уведомление</strong>",
duration: 3000,
escapeMarkup: true
}).showToast();
escapeMarkup: true — все HTML-теги внутри
text будут экранированы и отображены как обычный
текст.escapeMarkup: false — HTML-теги будут интерпретированы
браузером, позволяя использовать <strong>,
<em>, <a> и другие элементы.Пример с отключением экранирования:
Toastify({
text: "<strong>Важное уведомление</strong>",
duration: 3000,
escapeMarkup: false
}).showToast();
В этом случае уведомление отобразит текст жирным
шрифтом, а не
<strong>Важное уведомление</strong>.
Установка escapeMarkup: false открывает возможность
внедрения HTML-кода, что потенциально делает приложение уязвимым к
XSS-атакам. Поэтому использование этой опции должно быть ограничено:
Пример безопасного подхода:
function sanitizeHTML(str) {
return str.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const userMessage = "<script>alert('XSS')</script>";
Toastify({
text: sanitizeHTML(userMessage),
escapeMarkup: true,
duration: 3000
}).showToast();
Иногда требуется смешанный подход: часть текста безопасно
экранировать, а часть отображать с HTML. Для этого можно использовать
комбинацию escapeMarkup и генерацию HTML через
Jav * aScript:
const boldText = "<strong>Важно:</strong>";
const safeText = " Новое уведомление готово.";
Toastify({
text: `${boldText}${safeText}`,
escapeMarkup: false,
duration: 4000
}).showToast();
В данном случае <strong> будет интерпретирован, а
остальная часть текста может быть сформирована динамически с
экранированием.
В текущей версии Toastify нет официального метода
для глобальной настройки escapeMarkup для всех уведомлений.
Опция указывается индивидуально для каждого вызова
Toastify(). Для удобства можно создать обертку:
function createToast(message, html=false) {
Toastify({
text: message,
escapeMarkup: !html,
duration: 3000
}).showToast();
}
createToast("<strong>Успех!</strong>", true);
createToast("Простое уведомление", false);
Эта практика позволяет стандартизировать обработку HTML и снижает риск случайного открытия XSS-уязвимости.
escapeMarkup: true.text при
escapeMarkup: false.Ожидание HTML по умолчанию Разработчики иногда
удивляются, что <strong> отображается как текст. По
умолчанию escapeMarkup: true.
Игнорирование безопасности Прямое отключение экранирования на пользовательском контенте может привести к XSS.
Попытка глобальной конфигурации Встроенной
поддержки глобального escapeMarkup нет; требуется
обертка.
Смешивание экранирования и динамического HTML Неправильная комбинация может привести к отображению необработанных тегов или поломке стилей.
escapeMarkup является ключевым инструментом для
управления HTML-разметкой в уведомлениях Toastify, обеспечивая баланс
между визуальной выразительностью и безопасностью. Грамотное
использование позволяет создавать стильные и безопасные всплывающие
уведомления в JavaScript-приложениях.