Noty — это лёгкая библиотека для создания уведомлений на
веб-страницах с возможностью настройки позиции, типа, анимации и
поведения сообщений. Уведомления создаются с помощью конструктора
new Noty({...}), где объект конфигурации задаёт все
параметры отображения.
Пример базового уведомления:
new Noty({
text: 'Привет! Это уведомление',
type: 'success', // success, error, warning, info, alert
timeout: 3000, // время жизни уведомления в мс
layout: 'topRight' // top, topLeft, topRight, bottom, bottomLeft, bottomRight, center
}).show();
Здесь ключевыми параметрами являются:
false означает постоянное уведомление до закрытия
вручную.Когда текст уведомления формируется на основе данных, введённых
пользователем (например, формы или URL-параметров), существует риск
внедрения вредоносного кода, особенно XSS-атак (Cross-Site Scripting).
Если передавать введённые данные напрямую в text, браузер
может интерпретировать HTML-теги, включая <script> и
обработчики событий, что приведёт к выполнению произвольного кода.
Пример небезопасного кода:
const userInput = '<img src=x oner ror=alert("XSS")>';
new Noty({
text: userInput,
type: 'alert'
}).show();
В этом случае при отображении уведомления браузер выполнит
alert("XSS").
Чтобы избежать XSS, пользовательский ввод нужно безопасно обрабатывать перед вставкой в уведомление.
Преобразование специальных символов <,
>, &, ", ' в
HTML-сущности:
function escapeHtml(str) {
return str.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const safeText = escapeHtml(userInput);
new Noty({
text: safeText,
type: 'info'
}).show();
Это самый простой способ предотвратить выполнение скриптов.
DOMPurify — надёжная библиотека для очистки HTML:
import DOMPurify from 'dompurify';
const sanitized = DOMPurify.sanitize(userInput);
new Noty({
text: sanitized,
type: 'success'
}).show();
DOMPurify позволяет сохранить допустимый HTML (например,
<b> или <i>) и удалить всё
потенциально опасное.
Noty поддерживает настройку текста как HTML или plain text. Чтобы вставлять только текст, без HTML:
new Noty({
text: userInput,
type: 'alert',
escape: true // заставляет Noty экранировать HTML
}).show();
Параметр escape: true автоматически превращает все
HTML-символы в безопасные сущности.
text.escape: true при работе с потенциально
небезопасными данными.Простой безопасный текст:
new Noty({
text: escapeHtml('<script>alert("hack")</script>'),
type: 'warning'
}).show();
С HTML и фильтрацией через DOMPurify:
const input = '<b>Важное!</b><script>alert("XSS")</script>';
const cleanInput = DOMPurify.sanitize(input);
new Noty({
text: cleanInput,
type: 'success'
}).show();
В обоих случаях любые опасные скрипты будут нейтрализованы, а допустимый HTML сохранён.
Любой текст, поступающий от пользователя и выводимый через Noty, должен проходить санитизацию. Это защищает от XSS и позволяет безопасно использовать уведомления с любым контентом, включая форматированный HTML.
Правильное сочетание escape, экранирования и библиотек
типа DOMPurify делает работу с Noty безопасной и гибкой для любых
проектов.