Безопасность плагинов

Архитектура расширений в картографических библиотеках строится вокруг подключаемых модулей, которые получают доступ к DOM-контейнеру карты, объекту map, слоям, событиям и внешним источникам данных. Любой плагин фактически выполняет произвольный JavaScript-код в контексте приложения, что автоматически делает его частью доверенной вычислительной среды. Это расширяет функциональность, но одновременно формирует дополнительную поверхность атаки, сравнимую с подключением сторонних зависимостей уровня ядра приложения.

Плагины в Leaflet обычно работают через:

  • расширение прототипов (L.*)
  • добавление новых слоёв (L.Layer, L.TileLayer)
  • подписку на события карты (map.on)
  • манипуляцию DOM внутри контейнера карты
  • загрузку внешних ресурсов (тайлы, GeoJSON, изображения, скрипты)

Каждый из этих механизмов может быть использован как легитимно, так и для внедрения уязвимостей при недостаточном контроле входных данных или источников кода.


Основные классы угроз в экосистеме плагинов

Выполнение произвольного кода через зависимость

Наиболее критичный риск связан с подключением плагинов через npm, CDN или прямые скрипты. Плагин может содержать:

  • намеренно вредоносный код
  • скомпрометированную зависимость
  • изменённую версию через supply chain attack

Особую опасность представляют случаи, когда:

  • версия плагина не фиксируется (используются диапазоны ^ или latest)
  • подключение происходит через CDN без контроля целостности
  • отсутствует аудит зависимостей

Supply chain атаки в JavaScript-экосистеме часто реализуются через подмену популярного пакета или внедрение вредоносного пост-инсталляционного скрипта.


DOM-инъекции и XSS через данные карты

Плагины, работающие с GeoJSON, popups и tooltips, часто формируют HTML на основе внешних данных:

  • содержимое всплывающих окон
  • подписи маркеров
  • атрибуты слоёв
  • данные из API

Если данные вставляются через innerHTML, bindPopup или шаблоны без экранирования, возникает риск XSS.

Типичные уязвимые паттерны:

  • вставка строк без sanitization
  • использование пользовательских свойств объектов GeoJSON напрямую
  • рендеринг HTML в tooltip без фильтрации

Особенно опасны плагины визуализации, где данные приходят из внешних API и интерпретируются как доверенные.


Инъекции через конфигурацию плагинов

Многие плагины принимают конфигурационные объекты:

  • URL источников тайлов
  • параметры запросов
  • функции обратного вызова
  • шаблоны HTML

Если конфигурация формируется из пользовательского ввода, возможны:

  • подмена endpoint’ов (data exfiltration)
  • внедрение JavaScript через callback
  • подмена источников картографических данных

На практике это приводит к ситуации, когда карта становится прокси для выполнения внешних запросов от имени пользователя.


Уязвимости в загрузке тайлов и внешних ресурсов

Плагины, работающие с TileLayer, часто загружают изображения и данные с внешних серверов. Риски включают:

  • подмена тайлов (UI spoofing)
  • внедрение tracking-пикселей
  • эксплуатация HTTP вместо HTTPS
  • отсутствие контроля доменов

При использовании пользовательских URL-шаблонов возможна SSRF-подобная модель поведения на уровне клиента, когда браузер выполняет запросы к нежелательным адресам.


Контроль целостности и управление зависимостями

Фиксация версий и lock-файлы

Безопасная модель подключения плагинов предполагает:

  • использование package-lock.json или yarn.lock
  • фиксированные версии зависимостей
  • запрет на автоматическое обновление в production

Диапазоны версий создают риск неконтролируемого обновления с изменением поведения или внедрением уязвимостей.


Subresource Integrity (SRI)

При подключении через CDN критическим механизмом защиты выступает SRI-хеширование. Оно позволяет браузеру проверять неизменность загружаемого скрипта.

Без SRI:

  • CDN становится точкой компрометации
  • возможна подмена кода на уровне сети или сервера

С SRI:

  • любая модификация файла делает его невалидным для исполнения

Контроль источников загрузки

Безопасная конфигурация ограничивает:

  • список доверенных доменов для тайлов
  • источники GeoJSON
  • API endpoints

Whitelist-подход снижает вероятность внедрения стороннего кода через плагины.


Санитизация данных и защита DOM

Обработка HTML в popups и tooltips

Leaflet позволяет связывать HTML с маркерами и слоями. Без фильтрации это становится каналом XSS.

Безопасные практики включают:

  • отказ от прямой вставки HTML из внешних источников
  • использование текстовых узлов вместо HTML
  • применение sanitizers (например, DOMPurify на уровне приложения)

Изоляция пользовательского контента

Любые данные, поступающие из GeoJSON или API, должны рассматриваться как недоверенные. Даже координаты могут сопровождаться метаданными, содержащими вредоносные строки.

Типовой риск:

  • поле properties.description содержит HTML/JS
  • плагин автоматически рендерит его в popup

Политики безопасности исполнения

Content Security Policy

CSP ограничивает:

  • выполнение inline-скриптов
  • загрузку внешних ресурсов
  • использование eval и подобных механизмов

Для картографических приложений особенно важны директивы:

  • script-src
  • connect-src
  • img-src

Без строгой CSP плагины могут незаметно загружать и исполнять внешние скрипты.


Запрет динамического исполнения кода

Опасные конструкции:

  • eval
  • new Function
  • строковые обработчики событий

Некоторые плагины используют их для динамической генерации поведения, что создаёт критическую уязвимость при передаче внешних данных.


Безопасность архитектуры плагинов

Принцип минимальных привилегий

Плагин должен:

  • работать только с объектом map
  • не иметь прямого доступа к глобальному состоянию приложения
  • не управлять сетевыми запросами вне своей зоны ответственности

Изоляция модулей

Практика изоляции включает:

  • IIFE-модули
  • ES Modules с явными экспортами
  • ограничение доступа к глобальному window

Это снижает риск конфликтов и скрытых побочных эффектов.


Проверка кода плагинов

Аудит включает:

  • анализ npm-дерева зависимостей
  • проверку пост-инсталляционных скриптов
  • поиск подозрительных сетевых запросов
  • анализ использования DOM API

Особое внимание уделяется:

  • минифицированному коду без исходников
  • отсутствию репозитория
  • редким или непроверенным авторами пакетам

Типовые ошибки интеграции плагинов

  • подключение плагинов без фиксации версии
  • доверие данным GeoJSON без фильтрации
  • использование HTML из API без санитизации
  • отсутствие CSP
  • подключение CDN без SRI
  • смешивание бизнес-логики и визуализации в одном плагине

Модель угроз для картографических приложений

Экосистема Leaflet-плагинов формирует комбинированную модель угроз:

  • клиентский XSS через визуальные компоненты
  • supply chain атаки через npm/CDN
  • утечка данных через внешние tile-серверы
  • подмена визуального слоя карты
  • выполнение произвольных скриптов через конфигурации

Каждый плагин становится доверенным агентом внутри браузера, что делает контроль источников и данных ключевым элементом безопасности всей системы.