Что такое source maps и почему они опасны
Source maps — это .map-файлы, которые отображают минифицированный JavaScript обратно в исходный код. Они нужны для отладки, но заодно открывают ваш оригинальный код всем желающим прямо в DevTools.
Если source maps доступны публично, атакующий может читать бизнес-логику, быстрее находить захардкоженные секреты и понимать архитектуру приложения.
Как проверить: DevTools -> вкладка Sources. Если видите оригинальные .tsx / .ts / .js файлы вместо минифицированного кода — source maps торчат наружу.
Next.js
productionBrowserSourceMaps по умолчанию false, но иногда его включают явно.
// next.config.js
const nextConfig = {
productionBrowserSourceMaps: false,
}
module.exports = nextConfig
Проверьте после деплоя:
curl -I https://yoursite.com/_next/static/chunks/main.js.map
# Должно вернуть 404
Vite
// vite.config.js
export default defineConfig({
build: {
sourcemap: false, // по умолчанию false, но лучше прописать явно
},
})
Create React App (CRA)
Добавьте в .env.production:
GENERATE_SOURCEMAP=false
Или передайте при сборке:
GENERATE_SOURCEMAP=false npm run build
Astro
В production-сборках Astro source maps отключены по умолчанию. Если вы добавляли плагин, который их включает:
// astro.config.mjs
export default defineConfig({
vite: {
build: {
sourcemap: false,
},
},
})
Vue (Nuxt)
Nuxt 3 использует Vite под капотом — source maps в продакшене отключены по умолчанию. Чтобы прописать явно:
// nuxt.config.ts
export default defineNuxtConfig({
vite: {
build: {
sourcemap: false,
},
},
})
Для Nuxt 2 (на webpack):
// nuxt.config.js
export default {
build: {
extend(config, { isDev }) {
if (!isDev) {
config.devtool = false
}
},
},
}
Проверьте:
npm run build
ls .output/public/_nuxt/*.map
# Ничего не должно быть
Angular
В angular.json найдите конфигурацию production и выставьте sourceMap: false:
{
"projects": {
"your-app": {
"architect": {
"build": {
"configurations": {
"production": {
"sourceMap": false
}
}
}
}
}
}
}
Или передайте флаг через CLI:
ng build --configuration production --no-source-map
Проверьте:
ls dist/your-app/browser/*.map
# Ничего не должно быть
WordPress
WordPress source maps не генерирует. Риск появляется только если тема или плагин использует webpack, Vite или другой бандлер — проверьте его конфиг и примените правила выше.
Если используете готовую тему со скомпилированными ассетами, проверьте, не оставил ли разработчик .map-файлы в комплекте. Заблокировать доступ к ним можно через .htaccess:
# .htaccess
<FilesMatch "\.map$">
Require all denied
</FilesMatch>
Или через Nginx:
location ~* \.map$ {
deny all;
return 404;
}
Tilda
Tilda не выставляет source maps — платформа компилирует и раздаёт свой JS, доступа к .map-файлам нет. Эта проблема к сайтам на Tilda не относится.
webpack
// webpack.config.js
module.exports = {
devtool: false,
}
Проверка после деплоя
DevTools -> Sources — должны быть только минифицированные файлы. Попробуйте запросить .map-файл напрямую — должен вернуть 404.
Либо запустите vibeblame снова — проблема должна исчезнуть.