Security updates

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

Ключевые принципы:

  • фиксация версии через package-lock.json или yarn.lock;
  • регулярное обновление minor/patch-версий;
  • контроль changelog перед обновлением;
  • отказ от использования устаревших веток, которые больше не получают security-патчи.

Особое внимание требуется при переходе между мажорными версиями Mapbox GL JS, так как изменения API могут влиять на безопасность загрузки стилей и источников данных.


Токены доступа и управление секретами

Mapbox GL JS использует токены доступа (access tokens) для авторизации запросов к API, стилям и тайлам. Ошибки в их управлении — один из основных источников утечек и злоупотреблений.

Типы токенов:

  • Public tokens — предназначены для использования в клиентском коде;
  • Secret tokens — используются только на серверной стороне.

Основные практики безопасности:

  • хранение токенов в переменных окружения, а не в коде;
  • ограничение токена по доменам (allowed origins);
  • минимизация scope (разрешений);
  • регулярная ротация токенов;
  • немедленная деактивация при подозрении на компрометацию.

Важно учитывать, что даже public token должен быть ограничен по домену, иначе он может быть использован сторонними сервисами для генерации расходов.


Защита от подмены стилей и источников данных

Mapbox GL JS позволяет загружать стили в формате JSON, которые определяют визуализацию карты. Эти стили могут включать внешние источники данных, изображения и шрифты.

Потенциальные риски:

  • внедрение вредоносных URL в style JSON;
  • подмена источников тайлов;
  • загрузка данных с недоверенных доменов.

Меры защиты:

  • загрузка стилей только с доверенного сервера или Mapbox CDN;
  • валидация JSON-структуры стиля до применения;
  • запрет динамического изменения style URL без проверки;
  • использование Content Security Policy для ограничения источников.

Content Security Policy и ограничения загрузки ресурсов

CSP играет критическую роль в защите приложений с Mapbox GL JS, поскольку библиотека активно использует внешние ресурсы: WebGL шейдеры, изображения, тайлы, шрифты.

Рекомендуемые директивы:

  • connect-src — ограничение API Mapbox и собственных серверов;
  • img-src — контроль загрузки растровых тайлов и иконок;
  • worker-src — разрешение только доверенных worker-скриптов;
  • script-src — запрет inline-скриптов при возможности.

Без корректной CSP даже корректный Mapbox GL JS-код может стать каналом утечки данных через сторонние запросы.


Безопасность WebGL и изоляция рендеринга

Mapbox GL JS использует WebGL для отрисовки карт, что накладывает специфические ограничения безопасности.

Основные риски:

  • эксплуатация уязвимостей драйверов GPU;
  • утечка данных через текстуры;
  • атаки через специально сформированные шейдеры.

Практики снижения риска:

  • использование актуальных версий браузеров;
  • отключение аппаратного ускорения в небезопасных средах;
  • контроль источников пользовательских стилей, влияющих на шейдеры;
  • отказ от произвольного исполнения пользовательских GLSL-конструкций.

Контроль зависимостей и supply chain security

Mapbox GL JS часто используется вместе с экосистемой npm-пакетов, что создаёт поверхность атак через цепочку зависимостей.

Рекомендуемые меры:

  • регулярный аудит зависимостей (npm audit, pnpm audit);
  • фиксация версий транзитивных пакетов;
  • использование lock-файлов;
  • проверка источников установки пакетов;
  • минимизация количества сторонних плагинов.

Особенно важно контролировать библиотеки, которые расширяют работу с Mapbox (кластеризация, визуализация слоёв, геокодинг), так как они часто имеют доступ к тем же данным, что и основной движок карты.


Безопасность работы с пользовательскими данными

Mapbox GL JS может отображать пользовательские GeoJSON-данные, загружаемые динамически. Это создаёт риск инъекций через данные, а не через код.

Потенциальные угрозы:

  • внедрение больших или специально повреждённых GeoJSON-файлов (DoS через парсинг);
  • подмена координатных систем;
  • внедрение неожиданных свойств, влияющих на стилизацию.

Меры защиты:

  • валидация GeoJSON перед загрузкой;
  • ограничение размера входных данных;
  • фильтрация свойств объектов;
  • нормализация координат.

Работа с CDN и контроль целостности ресурсов

Mapbox GL JS часто подключается через CDN, что требует контроля целостности загружаемых файлов.

Практики:

  • использование Subresource Integrity (SRI), если подключение происходит через <script>;
  • фиксация версии CDN-ресурса, а не использование latest;
  • мониторинг изменений хэшей файлов;
  • предпочтение локальной сборки через npm для критичных приложений.

CDN упрощает доставку, но увеличивает зависимость от внешнего источника, что требует дополнительных проверок.


Изоляция окружений и безопасная архитектура

Архитектурная изоляция снижает риски даже при компрометации фронтенда.

Рекомендуемые подходы:

  • разделение публичных и приватных API;
  • проксирование запросов к Mapbox API через сервер;
  • ограничение логики работы с токенами на клиенте;
  • использование серверной генерации стилей при необходимости;
  • применение rate limiting на backend-уровне.

Такой подход уменьшает ущерб при утечке токена или внедрении вредоносного скрипта.


Мониторинг, логирование и реагирование на инциденты

Безопасность Mapbox GL JS не ограничивается настройкой — требуется постоянное наблюдение за использованием API.

Контролируемые параметры:

  • количество запросов к тайлам и стилям;
  • аномальные пики использования токена;
  • неожиданные географические паттерны запросов;
  • ошибки загрузки ресурсов.

При обнаружении подозрительной активности:

  • немедленная ротация токена;
  • ограничение доменов использования;
  • анализ клиентских логов;
  • пересборка и переиздание frontend-артефактов.

Безопасное обновление конфигураций и стилей

Изменения в стилях Mapbox могут влиять не только на визуализацию, но и на безопасность, особенно если стили генерируются динамически.

Риски:

  • внедрение внешних источников через style layers;
  • подмена sprite или glyph URL;
  • использование небезопасных expression-функций.

Практики:

  • централизованное управление стилями;
  • хранение версий стилей в системе контроля версий;
  • ревью изменений стилей аналогично коду;
  • ограничение возможности клиентских модификаций стиля.