Infrastruktura i wdrożenie
Aplikacja może być idealna, a serwer nadal szeroko otwarty. Te sprawdzenia dotyczą tego, jak i gdzie aplikacja działa.
Lista kontrolna
- Wystawiaj tylko te porty, które faktycznie chcesz wystawić. Zapora hosta zezwalająca na 22, 80 i 443 nie wystarcza sama: Docker publikuje porty kontenerów, zapisując reguły iptables, które omijają ufw. Dlatego
-p 9000:9000może być osiągalne z internetu, nawet gdy zapora "zezwala tylko na 443". Wiąż porty kontenerów z127.0.0.1, chyba że mają być publiczne, i skanuj swój publiczny adres IP, aby potwierdzić, co faktycznie jest otwarte. - Trzymaj panele administracyjne poza publicznym internetem. Pulpity takie jak Portainer, narzędzia administracyjne baz danych i interfejsy metryk nigdy nie powinny być dostępne z internetu. Świeży panel administracyjny bez ustawionego konta to pełne przejęcie: każdy, kto do niego dotrze w oknie konfiguracji, przejmuje maszynę. Polityki restartu mogą ponownie otworzyć to okno.
- Wiąż serwery aplikacji z loopbackiem i stawiaj przed nimi reverse proxy. Aplikacja nasłuchuje na
127.0.0.1, a nginx lub brzeg sieci kończy TLS i przekazuje ruch dalej. - Spraw, by origin był nieosiągalny poza brzegiem. Jeśli używasz Cloudflare lub podobnej usługi, wymuś to przez authenticated origin pulls (mTLS) lub listę dozwolonych adresów IP, aby atakujący nie mógł ominąć WAF, uderzając bezpośrednio w adres IP originu.
- Ustaw nagłówki zabezpieczeń.
Strict-Transport-Security,X-Content-Type-Options: nosniff,X-Frame-Options: DENY(lubframe-ancestors 'none'), ścisłeContent-Security-Policy(najlepiejscript-src 'self'bezunsafe-inlineiunsafe-eval),Referrer-Policyoraz zablokowanePermissions-Policy. - Nie ujawniaj wersji ani stosu technologicznego. Usuń bannery
ServeriX-Powered-By. - Zablokuj dostęp do plików z kropką i wyników budowania.
/.env,/.git/, pliki konfiguracyjne i mapy źródłowe (source maps) nie mogą być dostępne przez web. Potwierdź, że każdy z nich zwraca 403 lub 404. - Pokazuj ogólne błędy. Żadnych stack trace'ów ani ścieżek wewnętrznych dla użytkowników. Szczegóły loguj po stronie serwera.
- Utrzymuj środowisko uruchomieniowe załatane i uruchamiaj aplikację jako użytkownik bez uprawnień roota, z minimalnymi uprawnieniami, w kontenerze lub sandboksie, gdy to praktyczne.
Jak testować
- Z maszyny spoza swojej sieci przeskanuj publiczne adresy IP pod kątem otwartych portów.
- Zażądaj
/.env,/.git/configoraz pliku.mapna swojej domenie. - Odczytaj nagłówki odpowiedzi strony głównej i sprawdź każdą pozycję powyżej.