Infrastruktur und Deployment
Die App kann perfekt sein, und der Server steht trotzdem weit offen. Diese Prüfungen betreffen, wie und wo sie läuft.
Checkliste
- Nur die Ports freigeben, die Sie wirklich meinen. Eine Host-Firewall, die 22, 80 und 443 erlaubt, reicht allein nicht: Docker veröffentlicht Container-Ports, indem es iptables-Regeln schreibt, die ufw umgehen. Ein
-p 9000:9000kann deshalb aus dem Internet erreichbar sein, obwohl die Firewall "nur 443 erlaubt". Binden Sie Container-Ports an127.0.0.1, sofern sie nicht öffentlich sein sollen, und scannen Sie Ihre eigene öffentliche IP, um zu bestätigen, was tatsächlich offen ist. - Admin-Panels vom öffentlichen Internet fernhalten. Dashboards wie Portainer, Datenbank-Admin-Tools und Metrik-Oberflächen sollten niemals aus dem Internet erreichbar sein. Ein frisch installiertes Admin-Panel ohne eingerichtetes Konto bedeutet eine vollständige Übernahme: Wer es während des Setup-Fensters erreicht, besitzt die Maschine. Restart-Richtlinien können dieses Fenster wieder öffnen.
- App-Server an Loopback binden und einen Reverse-Proxy davorschalten. Die App lauscht auf
127.0.0.1. nginx oder der Edge terminiert TLS und leitet weiter. - Den Origin nur über den Edge erreichbar machen. Wenn Sie Cloudflare oder einen ähnlichen Dienst verwenden, erzwingen Sie das mit Authenticated Origin Pulls (mTLS) oder einer IP-Allowlist. So können Angreifer das WAF nicht umgehen, indem sie die Origin-IP direkt ansprechen.
- Security-Header setzen.
Strict-Transport-Security,X-Content-Type-Options: nosniff,X-Frame-Options: DENY(oderframe-ancestors 'none'), eine strikteContent-Security-Policy(idealerweisescript-src 'self'ohneunsafe-inlineoderunsafe-eval), eineReferrer-Policyund eine restriktivePermissions-Policy. - Keine Version und keinen Stack preisgeben. Entfernen Sie die Banner
ServerundX-Powered-By. - Zugriff auf Dotfiles und Build-Ausgaben blockieren.
/.env,/.git/, Konfigurationsdateien und Source Maps dürfen nicht über das Web erreichbar sein. Bestätigen Sie, dass jede dieser Adressen 403 oder 404 liefert. - Generische Fehlermeldungen anzeigen. Keine Stack-Traces oder internen Pfade für Benutzer. Protokollieren Sie die Details serverseitig.
- Die Laufzeitumgebung aktuell halten und die App als Nicht-root-Benutzer mit minimalen Rechten betreiben, nach Möglichkeit in einem Container oder einer Sandbox.
Testvorgehen
- Scannen Sie Ihre öffentlichen IPs von einem Rechner außerhalb Ihres Netzwerks auf offene Ports.
- Rufen Sie
/.env,/.git/configund eine.map-Datei auf Ihrer Domain auf. - Lesen Sie die Response-Header Ihrer Startseite und prüfen Sie jeden oben genannten Punkt.