Tooltipster — это мощная библиотека для создания интерактивных и
настраиваемых всплывающих подсказок в JavaScript. Она позволяет легко
добавлять всплывающие элементы к любым HTML-элементам, управлять их
содержимым, стилем и поведением при взаимодействии пользователя.
Основная точка взаимодействия — метод .tooltipster(),
который инициализирует подсказку на выбранных элементах.
$('.tooltip').tooltipster({
content: 'Пример подсказки',
theme: 'tooltipster-light',
delay: 200,
interactive: true
});
content — текст или HTML, который будет отображён в
подсказке.theme — визуальное оформление подсказки.delay — задержка перед появлением подсказки в
миллисекундах.interactive — разрешает взаимодействие с подсказкой
(клики, ссылки, формы).В Tooltipster есть возможность отображать динамическое содержимое, в том числе переданное пользователем. Здесь возникает риск XSS (Cross-Site Scripting), если данные не проходят фильтрацию. Любой HTML-код, вставленный напрямую, может быть выполнен в браузере, что потенциально опасно.
content с текстомДля безопасного отображения данных рекомендуется использовать текстовый формат, чтобы любые HTML-теги интерпретировались как текст:
let userInput = '<script>alert("Опасно!")</script>';
$('.tooltip').tooltipster({
content: $('<span>').text(userInput)
});
В этом примере все символы HTML экранируются, и скрипт не выполнится.
Ключевой момент — использование метода .text() jQuery для
экранирования данных.
Если требуется использовать HTML (например, форматированный текст, ссылки), необходимо самостоятельно проверять и фильтровать содержимое. Можно применять библиотеки вроде DOMPurify для очистки:
let unsafeHtml = '<img src=x oner ror=alert(1)><b>Привет</b>';
let safeHtml = DOMPurify.sanitize(unsafeHtml);
$('.tooltip').tooltipster({
content: $(safeHtml),
interactive: true
});
DOMPurify удаляет любые опасные атрибуты и скрипты, оставляя только безопасные элементы. Это позволяет безопасно использовать подсказки с интерактивным HTML.
Tooltipster поддерживает динамическое обновление содержимого через
метод .tooltipster('content', newContent). Это особенно
важно при работе с пользовательскими данными, поступающими из форм или
API:
$('#button').on('click', function() {
let newContent = $('#input').val();
$('.tooltip').tooltipster('content', $('<span>').text(newContent));
});
Использование .text() при обновлении обеспечивает
автоматическое экранирование любых потенциально опасных символов.
Если подсказка содержит формы или кликабельные элементы, следует
включать опцию interactive: true и при этом строго
контролировать содержимое:
$('.tooltip').tooltipster({
content: $('<div>').append(
$('<a>').attr('href', '#').text('Нажми меня')
),
interactive: true
});
Tooltipster позволяет подгружать содержимое через AJAX. В этом случае проверка данных особенно важна:
$('.tooltip').tooltipster({
contentAsHTML: true,
functionBefore: function(instance, helper) {
$.get('/api/userdata', function(data) {
let safeData = DOMPurify.sanitize(data);
instance.content($(safeData));
});
}
});
contentAsHTML: true разрешает использование HTML.Темы Tooltipster не влияют на безопасность, но правильное оформление улучшает читаемость и восприятие подсказок. Темы должны быть подключены через CSS и не включать инлайновый JavaScript.
$('.tooltip').tooltipster({
theme: 'tooltipster-shadow'
});
Использование предопределённых тем снижает риск внедрения вредоносного кода через стили.
.text()
или использовать DOMPurify при HTML.interactive: true
только при безопасном содержимом.Эти подходы обеспечивают безопасное использование Tooltipster в проектах, где подсказки обрабатывают данные, поступающие от пользователей или внешних API.