Shepherd.js — библиотека для создания интерактивных пользовательских туров на веб-страницах. Несмотря на удобство, интеграция Shepherd требует соблюдения правил безопасности, чтобы минимизировать риски XSS, утечек данных и некорректного поведения интерфейса.
Подключение библиотеки следует выполнять только через проверенные источники, предпочтительно через официальные CDN или локально размещённые файлы. Использование непроверенных пакетов повышает вероятность внедрения вредоносного кода.
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
Все тексты, отображаемые в подсказках (text,
title), должны быть безопасными. Встроенный HTML следует
использовать только при полном контроле над содержимым. Любой
динамический текст, получаемый из внешних источников, должен проходить
экранирование:
function escapeHtml(str) {
return str.replace(/[&<>"']/g, (match) => {
const escapeMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' };
return escapeMap[match];
});
}
const tour = new Shepherd.Tour({
defaultStepOptions: {
text: escapeHtml(userInput),
classes: 'shepherd-theme-arrows'
}
});
Шаги Shepherd.js могут включать кнопки с колбэками
(action). Для безопасной интеграции важно:
eval или
динамическое создание функций.tour.addStep({
id: 'example-step',
text: 'Нажмите кнопку, чтобы перейти к следующему шагу',
buttons: [
{
text: 'Далее',
action: () => tour.next()
}
]
});
Shepherd.js использует селекторы для привязки подсказок к элементам страницы. Несоблюдение правил безопасности может привести к манипуляции DOM злоумышленником:
const targetElement = document.querySelector('#important-button');
if (targetElement) {
tour.addStep({
id: 'button-step',
text: 'Нажмите на кнопку',
attachTo: { element: targetElement, on: 'bottom' }
});
}
Shepherd.js сам по себе не делает сетевых запросов, но подсказки могут содержать контент, загружаемый из внешних источников. Для безопасности:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' https://trusted-cdn.com;">
Shepherd.js предоставляет события (show,
hide, cancel, complete) для
контроля работы тура. Важно логировать критические события и безопасно
обрабатывать исключения:
tour.on('cancel', () => {
console.warn('Тур прерван пользователем');
});
tour.on('show', (step) => {
try {
console.log(`Показан шаг: ${step.id}`);
} catch (error) {
console.error('Ошибка при отображении шага:', error);
}
});
Регулярное обновление Shepherd.js минимизирует уязвимости. Новые версии исправляют баги безопасности, оптимизируют обработку DOM и предотвращают XSS-риски.
Эти меры обеспечивают безопасное использование Shepherd.js в сложных интерфейсах, снижая риск XSS, неконтролируемых действий и потенциальной компрометации данных.