Source Maps в продакшне: почему нельзя оставлять .map файлы
Файлы Source Maps (*.js.map) создаются сборщиками для отладки кода разработчиком. Они связывают сжатый и минифицированный продакшн-бандл с оригинальными некомпилированными файлами TypeScript/React.
Если файлы .map развернуты на боевом сервере, любой посетитель сайта через инструменты разработчика Chrome DevTools получает доступ к исходным исходникам, структуре папок, внутренним комментариям и служебным функциям.
Степень критичности и чем опасна уязвимость
Раскрытие исходников упрощает злоумышленникам обратный инжиниринг вашего приложения, поиск закрытых эндпоинтов и недокументированных параметров API.
Как наш сканер находит эту уязвимость
Site Check анализирует директивы //# sourceMappingURL= в подключенных скриптах и проверяет HTTP-доступность файлов .map на сервере.
В рамках сканирования конфигурационных файлов модуль Site Check отправляет легковесные изолированные HEAD- и GET-запросы с валидацией статус-кодов (404/403 vs 200). Запросы содержат стандартные маркеры безопасности и не сохраняют скачиваемые данные в постоянное хранилище, предотвращая несанкционированное распространение конфиденциальной информации.
Как устранить уязвимость (Пошаговое руководство)
Для ликвидации риска выполните следующие действия в конфигурации вашего сервера или приложения:
// В vite.config.ts или next.config.js:
export default defineConfig({
build: {
sourcemap: false, // Отключаем генерацию карт исходников для продакшна
},
});
- Установите build.sourcemap: false в конфигурации сборщика Vite / Webpack / Next.js.
- Удалите файлы *.map из рабочей веб-директории на сервере.
- Если отладка в продакшне необходима, настройте приватную загрузку карт в систему мониторинга ошибок (Sentry).
Анатомия атаки и реальные последствия для проекта
Наличие файлов .map в продакшне позволяет открыть вкладку Sources в Chrome DevTools и восстановить оригинальный неминифицированный код TypeScript. Исследователь видит комментарии TODO, закрытые эндпоинты админки, внутренние структуры данных и логику валидации, что в разы упрощает поиск уязвимостей нулевого дня.
Влияние на соответствие стандартам: Несоответствие рекомендациям OWASP Top 10 (A05:2021 Security Misconfiguration) и политике защиты исходного кода.
Матрица эшелонированной защиты (Defense-in-Depth)
| Уровень защиты | Техническое действие | Инструмент / Механизм |
|---|---|---|
| Конфигурация сборщика (Bundler) | Установка sourcemap: false или sourcemap: "hidden" в vite.config.ts / webpack.config.js | Vite / Rollup Config |
| Веб-сервер Nginx | Блокировка запросов к файлам с расширением .map для внешних пользователей | Nginx location rule |
| Мониторинг ошибок | Загрузка карт кода напрямую в Sentry через CLI в CI/CD без их публикации на хостинге | Sentry CLI |
Верификация устранения: команды для быстрой проверки
После внесения изменений в настройки сервера или исходный код приложения проверьте отсутствие уязвимости с помощью терминальных утилит:
curl -I -s https://ваш-домен.com/index.js.map | grep "HTTP/"
# Ожидается 404 Not Found
Рекомендации DevSecOps для безопасного развертывания
В файле конфигурации vite.config.ts или tsconfig.json установите sourcemap: false для режима production (или sourcemap: "hidden", если карты отправляются в Sentry).
- ✓ Добавить шаблоны .env* и .git* в корень .gitignore и глобальный gitignore
- ✓ Внедрить автоматический pre-commit хук gitleaks в локальный пайплайн разработки
- ✓ Настроить регулярную ротацию скомпрометированных токенов API
- ✓ Проверить конфигурацию веб-сервера на блокировку запросов к скрытым файлам
Часто задаваемые вопросы по устранению
Утечки секретов и конфигурационных файлов представляют максимальную угрозу автоматизированного захвата инфраструктуры. Рекомендуется внедрить pre-commit хуки (GitLeaks, TruffleHog), вынести переменные окружения в защищённые хранилища секретов (HashiCorp Vault, Doppler, AWS Secrets Manager) и настроить в веб-сервере безусловный запрет отдачи скрытых файлов с точкой.
Для предотвращения вектора «Source Maps в продакшне: почему нельзя оставлять .map файлы» зафиксируйте проверочные правила в CI/CD пайплайне и настройте непрерывный мониторинг внешнего периметра через Site Check.