Production'daki source map'ler kaynak kodunu sızdırır
Source map'ler (.js.map dosyaları), tarayıcıların minify edilmiş kodu orijinal kaynağına geri eşlemesini sağlar. Production'da herkese açık sunulurlarsa, herkes minify edilmemiş kod tabanını, yorumlarla birlikte yeniden oluşturabilir.
Nedir
Build araçları, hata ayıklamaya yardımcı olmak için source map'ler üretir. Minify edilmiş bundle, aynı zamanda deploy edilmiş bir .map dosyasına referans verdiğinde, tarayıcı — ve herkes — orijinal kaynağı indirebilir.
Bu; iç mantığı, adlandırmayı, TODO yorumlarını ve bazen backend'inin ve auth'unun nasıl çalıştığını ortaya koyan sabit kodlanmış değerleri açığa çıkarır.
Neden önemli
Okunabilir kaynak, saldırganların mantık hatalarını, gizli endpoint'leri ve yalnızca istemcide çalışan doğrulamaları bulmasını çok daha kolaylaştırır.
Ayrıca bundle içinde 'gizli' varsayılan secret'ları veya iç URL'leri de sızdırabilir.
Nasıl düzeltilir
Production build'leri için tarayıcı source map'lerini kapat.
// next.config.js
module.exports = { productionBrowserSourceMaps: false };Hata izleme için source map'lere ihtiyacın varsa, onları hata izleyicine (örn. Sentry) yükle ve sunmak yerine herkese açık build'den çıkar.
Deploy'dan sonra, bundle'ının .map URL'lerinden birini iste. JSON source map değil, 404 döndürmeli.
SSS
Source map'ler her zaman kötü müdür?
Hayır — hata ayıklama için çok değerlidirler. Sorun, onları production'da herkese açık sunmaktır. Bunun yerine izleme pipeline'ında tut.
Minification kodumu korur mu?
Yalnızca yüzeysel olarak. Herkese açık bir source map ile minification tamamen okunabilir kaynağa geri döndürülür.
Uygulaman etkileniyor mu?
AppSafe, bunu ve onlarca başka sorunu tek bir ücretsiz taramada kontrol eder.
Uygulamamı ücretsiz taraİlgili rehberler
İstemci tarafı JavaScript'te açığa çıkan API key'leri
Bundle'ındaki her şey herkese açıktır. Öyle davran.
.env dosyalarının açığa çıkması: saldırganlar secret'larını nasıl bulur
Erişilebilir tek bir .env, tüm stack'ini teslim edebilir.
Content-Security-Policy (CSP): nedir ve nasıl eklenir
Enjekte edilen script'lerin çalışmasını durduran header.