Knowledge Base

Утечка исходного кода через Source Maps (.map файлы)

Утечка исходного кода через Source Maps

Категория: Web Application Security · Риск: medium

Утечка исходного кода через Source Maps

Что такое Source Maps

Source maps (`.js.map`) — файлы, позволяющие браузерным DevTools отображать минифицированный JavaScript как оригинальный исходный код (с именами переменных, структурой файлов, комментариями).

Если `.map`-файлы доступны публично на production-сервере, **любой человек может скачать полный оригинальный исходный код вашего фронтенда**.

Что утекает

Проверка

# Проверить наличие map-файлов
curl -si https://example.com/static/app.js | grep sourceMappingURL
# Если в конце: //# sourceMappingURL=app.js.map

curl -si https://example.com/static/app.js.map | head -5
# Опасно если вернёт 200 + JSON содержимое

Как закрыть доступ

Nginx — заблокировать .map файлы

# Запретить прямой доступ к source maps
location ~* \.map$ {
    deny all;
    return 404;
    access_log off;
    log_not_found off;
}

Webpack — не генерировать source maps в production

// webpack.config.js
module.exports = {
    mode: 'production',
    devtool: false,  // отключить source maps полностью
    // или:
    devtool: 'hidden-source-map',  // генерировать но не ссылаться в JS
};

Vite

// vite.config.js
export default {
    build: {
        sourcemap: false,  // или 'hidden'
    }
};

Create React App

# В .env.production
GENERATE_SOURCEMAP=false

Hidden source maps (компромисс)

Вариант `hidden-source-map` генерирует `.map`-файл но **не** добавляет ссылку `//# sourceMappingURL=` в JS. Файлы существуют для Sentry/мониторинга ошибок, но не доступны через браузер.

# Разрешить доступ только с IP Sentry
location ~* \.map$ {
    allow 35.202.0.0/16;  # Sentry IP range
    deny all;
}

Когда source maps нужны

# Загрузка в Sentry без публикации
sentry-cli releases files <version> upload-sourcemaps ./build

Связанные проверки