iziToast — это легковесная библиотека для отображения уведомлений в браузере. Она позволяет выводить информационные, предупреждающие и ошибки сообщения, используя удобный и настраиваемый интерфейс. Однако при работе с динамическими данными существует риск XSS-атак (Cross-Site Scripting), когда вредоносный скрипт может быть внедрён в уведомление и выполнен в браузере пользователя.
По умолчанию iziToast отображает текстовые строки,
переданные в параметрах title и message. Любой
HTML-код, включённый в эти строки, будет интерпретирован браузером, что
создаёт уязвимость. Например:
iziToast.show({
title: 'Информация',
message: '<img src=x oner ror=alert(1)>'
});
В этом случае тег <img> с событием
onerror выполнит JavaScript-код. Чтобы этого избежать,
не следует передавать необработанный HTML от
пользователя.
Для безопасного отображения пользовательского контента следует использовать экранирование специальных символов:
< → <> → >& → &" → "' → 'Пример безопасного вывода с использованием функции экранирования:
function escapeHTML(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const userMessage = '<script>alert("XSS")</script>';
iziToast.show({
title: 'Сообщение',
message: escapeHTML(userMessage)
});
В этом примере любой HTML или JavaScript от пользователя будет отображён как текст, а не выполнен.
message с HTMLiziToast поддерживает опцию messageHTML, которая
позволяет вставлять HTML-код напрямую. Эта функциональность
особенно опасна, если данные приходят из ненадёжного
источника. Рекомендуется не использовать
messageHTML с пользовательским вводом. Если
необходимо динамически формировать HTML, нужно применять строгую
фильтрацию и безопасные шаблонизаторы.
Для XSS-защиты важным аспектом является контроль источников данных:
title и message.messageHTML.const userName = '<img src=x oner ror=alert(1)>';
iziToast.success({
title: 'Приветствие',
message: `Добро пожаловать, ${escapeHTML(userName)}!`,
timeout: 5000,
position: 'topRight'
});
В этом примере имя пользователя безопасно отображается в уведомлении, без риска выполнения вредоносного кода.
Даже если текст экранирован, необходимо следить за тем, что:
messageHTML.Эти методы обеспечивают надёжную защиту от XSS-атак при работе с iziToast, позволяя безопасно отображать уведомления и сохранять интерактивность интерфейса без риска выполнения вредоносного кода.