深刻度:高設定ミス
本番のsource mapはソースコードを漏らす
source map(.js.map ファイル)は、圧縮されたコードを元のソースに対応づけるものです。本番で公開配信されていると、誰でもコメントも含めた圧縮前のコードベースを復元できてしまいます。
これは何か
ビルドツールは、デバッグを助けるために source map を出力します。圧縮されたバンドルが、同時にデプロイされた .map ファイルを参照していると、ブラウザは——そして誰でも——元のソースをダウンロードできます。
これにより、内部ロジック、命名、TODOコメント、ときにはバックエンドや認証の仕組みが分かるハードコードされた値までが露出します。
なぜ重要か
ソースが読めると、攻撃者がロジックの不備、隠れたエンドポイント、クライアント側だけで動く検証を見つけるのがはるかに簡単になります。
バンドル内で「隠されている」と思い込んでいたシークレットや内部URLが漏れることもあります。
直し方
Next.jsで本番のsource mapを無効化する
本番ビルドのブラウザ向けsource mapを無効にしてください。
// next.config.js
module.exports = { productionBrowserSourceMaps: false }; あるいは非公開に保つ
エラー監視のために source map が必要な場合は、配信する代わりに、エラートラッカー(例:Sentry)にアップロードし、公開ビルドからは取り除いてください。
消えたことを確認する
デプロイ後、バンドルの .map URLのいずれかにアクセスしてみてください。JSONのsource mapではなく、404が返るはずです。
FAQ
source map は常に悪いものですか?
いいえ。デバッグには欠かせません。問題は、本番で公開配信することです。代わりに監視パイプラインの中にとどめてください。
圧縮(minification)はコードを守ってくれますか?
表面的にだけです。公開された source map があれば、圧縮は完全に元に戻され、読めるソースに復元されます。