Jak działa ta kontrola
Scanaris żąda listy ścieżek odpowiadających panelom i narzędziom debugowania, które nigdy nie powinny odpowiadać na produkcji, i sprawdza, czy odpowiedź jest rzeczywiście odpowiedzią narzędzia, a nie ogólną stroną Twojej witryny. Ścieżki i ich waga: /actuator/health ze Spring Boot (wysoka), /actuator/env i /actuator/heapdump (krytyczne: zmienne środowiskowe i zrzut pamięci), /telescope/requests z Laravel Telescope (wysoka), /_ignition/health-check z Laravel Ignition w trybie debug (krytyczna, bo podatne wersje pozwalały wykonać kod), /_profiler z Symfony (wysoka), /.vscode/sftp.json z danymi logowania do wdrożeń (krytyczna), /server-status Apache (średnia) i /phpmyadmin/ (wysoka).
Dlaczego to ważne
Te narzędzia istnieją po to, by pokazać wnętrze aplikacji temu, kto ją tworzy: konfigurację, zmienne środowiskowe z hasłami, ostatnie żądania z parametrami, pełne ślady błędów, zawartość pamięci procesu. W fazie rozwoju są cenne; na produkcji, otwarte w internecie, to drzwi z kluczem w zamku. Dostępny /actuator/env często zawiera ciąg połączenia z bazą danych. Publiczny phpMyAdmin to punkt wejścia do testowania haseł do Twojej bazy przez 24 godziny na dobę.
Dlaczego tak się dzieje
Bo ta sama konfiguracja służy do rozwoju i produkcji. Tryb debug Laravela (APP_DEBUG=true), endpointy Actuatora wystawione domyślnie w starych wersjach Springa, profiler Symfony z APP_ENV=dev, phpMyAdmin zainstalowany „żeby na chwilę zajrzeć do bazy" i nigdy nieusunięty. Narzędzia AI generujące projekt rzadko rozróżniają środowiska, a wdrożenie dziedziczy konfigurację deweloperską.
Jak to naprawić
- Laravel:
APP_DEBUG=falseiAPP_ENV=productionw produkcyjnym.env. Telescope tylko lokalnie (TELESCOPE_ENABLED=falselub gate autoryzacji). Zaktualizuj Ignition do wersji bez podatności. - Spring Boot: najwyżej
management.endpoints.web.exposure.include=health, bezenviheapdump, i z zabezpieczeniem przed/actuator. Jeszcze lepiej wystaw actuator na osobnym porcie zarządzania, który nie wychodzi do internetu. - Symfony:
APP_ENV=prodiAPP_DEBUG=0; profiler rejestruje się tylko wdev. - phpMyAdmin: odinstaluj go z publicznego serwera. Jeśli go potrzebujesz, korzystaj przez tunel SSH albo ogranicz po IP z dodatkowym uwierzytelnianiem.
- Apache server-status:
Require ip 127.0.0.1w dyrektywieLocation /server-statusalbo wyłącz moduł. - Pliki edytora jak
.vscode/sftp.json: nigdy nie mogą trafić do wdrożenia. Dodaj.vscode/do.gitignore, a jeśli plik został opublikowany, zmień hasło, które zawiera.
Sprawdź, czy naprawione
for p in actuator/health actuator/env telescope/requests _ignition/health-check _profiler .vscode/sftp.json server-status phpmyadmin/; do
printf "%-26s " "$p"; curl -s -o /dev/null -w "%{http_code}\n" "https://twojadomena.pl/$p"
done
Oczekiwane: 404, 403 lub 401 wszędzie. 200 jest akceptowalne tylko wtedy, gdy zwracana jest Twoja ogólna strona, a nie narzędzie.
Często zadawane pytania
Mój panel prosi o hasło. Czy to nadal ustalenie?
Scanaris sprawdza zawartość, więc panel chroniony uwierzytelnianiem, który zwraca 401, nie jest zgłaszany. Mimo to phpMyAdmin z logowaniem to cel ataków siłowych; lepiej poza internetem.
A /actuator/health? Mówi tylko „UP".
Potwierdza technologię i wersję Springa, której używasz, i zwykle wskazuje, że pozostałe endpointy też są wystawione. Jeśli potrzebujesz publicznego health checka dla load balancera, stwórz własną minimalną ścieżkę zamiast otwierać actuator.
Używam Next.js lub Nuxt. Czy to mnie dotyczy?
Te konkretne ścieżki nie, ale zasada tak: ścieżki API do debugowania lub seedowania (/api/debug, /api/seed), które AI tworzy do testów, muszą zniknąć przed wdrożeniem.