Jak działa ta kontrola
Scanaris bierze pierwsze skrypty z Twojej domeny linkowane przez stronę główną, pobiera każdy i szuka na końcu komentarza //# sourceMappingURL=…, który zostawia narzędzie do builda. Jeśli istnieje, rozwiązuje ten URL, pobiera plik .map i sprawdza, czy to naprawdę source mapa (zawiera klucze sources lub mappings). Dopiero wtedy otwiera znalezisko ze średnią wagą. Source mapy osadzone jako data: się nie liczą, bo nie wystawiają osobnego pliku, a .map, który istnieje, ale na który nie wskazuje żaden skrypt, tą drogą też nie jest wykrywany.
Co atakujący z tym robi
Z plikiem .map i darmowym narzędziem odtwarza Twój kod źródłowy tak, jak go napisałeś: nazwy zmiennych, komentarze, strukturę katalogów i często rzeczy, które uważałeś za usunięte. Zwykle pojawiają się: wewnętrzne i administracyjne ścieżki API, logika cen lub limitów, którą da się ominąć od strony klienta, komentarze typu „TODO: usunąć ten klucz" i funkcje wyłączone, ale nieskasowane. Samo w sobie to nie włamanie, ale zamienia czarną skrzynkę w plan budynku.
Dlaczego publikuje się je przypadkiem
Niektóre szablony włączają mapy do debugowania i nikt ich nie wyłącza przy przejściu na produkcję. W Vite opcja build.sourcemap: true generuje je i dodaje komentarz; w Next.js productionBrowserSourceMaps: true; w Nuxt sourcemap.client: true. W innych przypadkach generuje je integracja monitoringu błędów, która potrzebuje map i zostawia je w katalogu publicznym zamiast wysłać tylko do swojej usługi.
Jak to naprawić
- Vite / Lovable / Bolt: w
vite.configbuild.sourcemap: false. Jeśli Twoje narzędzie do błędów ich potrzebuje, użyj wtyczki usługi (Sentry i podobne), która wysyła je podczas builda i usuwa z wyjścia. - Next.js:
productionBrowserSourceMapsjest domyślniefalse; sprawdź, czy nikt nie zmienił tego wnext.config. - Nuxt:
sourcemap: { client: false }wnuxt.config. - Zablokuj je na serwerze jako drugą barierę. W nginx:
location ~ \.map$ { return 404; }. Na Vercelu lub Netlify wystarczy ich nie generować, bo serwowane jest tylko to, co jest w katalogu wyjściowym.
Jeśli wolisz je zachować do debugowania bez publikowania, opcja hidden w Vite generuje pliki bez linkującego komentarza; mimo to lepiej nie wrzucać ich do katalogu publicznego, bo pozostają dostępne dla każdego, kto zgadnie nazwę.
Sprawdź, czy naprawione
curl -s https://twojadomena.com | grep -oE 'src="[^"]+\.js[^"]*"' | cut -d'"' -f2 | head -3
curl -s https://twojadomena.com/assets/index-XXXX.js | tail -c 200
curl -sI https://twojadomena.com/assets/index-XXXX.js.map | head -1
Drugie polecenie nie powinno pokazać żadnego sourceMappingURL, a trzecie powinno zwrócić 404. Jeśli pierwsze nie wypisuje skryptów, Twoja strona ładuje je inaczej; zajrzyj do narzędzi przeglądarki, zakładka Sieć.
Często zadawane pytania
Czy potrzebuję source map, żeby rozumieć błędy na produkcji?
Tak, ale nie muszą być publiczne. Usługi monitoringu przyjmują mapy podczas builda i wiążą je z tą wersją; przeglądarka nigdy ich nie widzi.
Czy mapy CSS też są problemem?
Dużo mniejszym: wystawiają Twoje oryginalne arkusze stylów, nie logikę. Skaner sprawdza tylko te od JavaScriptu.
Dlaczego waga średnia, a nie wysoka?
Bo mapa sama w sobie nie daje do niczego dostępu; ułatwia znalezienie innych błędów. Jeśli kod zawiera dodatkowo klucze albo niechronione ścieżki administracyjne, to są poważne znaleziska i Scanaris oznacza je osobno.