Skip to content

[Mittel] Produktions-Härtung: Security-Header, APP_SECRET, APP_ENV, CSRF #526

Description

@maltehuebner

Schweregrad: Mittel (Produktions-Härtung)

Mehrere Härtungsdefizite in der Konfiguration, sinnvoll gemeinsam zu beheben.

1. Fehlende HTTP-Sicherheitsheader

Es gibt keinen kernel.response-Listener, der Security-Header setzt (die vorhandenen Subscriber KernelEventSubscriber/SitemapEventSubscriber setzen nur Canonical-URL bzw. Sitemap). Es fehlen: Content-Security-Policy, Strict-Transport-Security (HSTS), X-Frame-Options (Clickjacking-Schutz), X-Content-Type-Options: nosniff.
→ Empfehlung: nelmio/security-bundle oder einen ResponseEvent-Subscriber ergänzen. Eine CSP ist zugleich zweite Verteidigungslinie für die |raw-Ausgaben in Twig.

2. Committetes APP_SECRET in versionierter .env

.env:7 enthält APP_SECRET=90f2d22c92712fa1cc32be3a26f4e599 und ist git-getrackt. APP_SECRET signiert u. a. CSRF-Tokens, remember_me-Cookies und URIs. Wird der Wert in Produktion nicht überschrieben, ist er öffentlich bekannt.
→ Empfehlung: APP_SECRET rotieren, in Produktion ausschließlich über Umgebungsvariable/Symfony-Secrets-Vault setzen, in der getrackten .env nur Platzhalter belassen.
(Die echt aussehenden LOGGLY_TOKEN/OPENWEATHERMAP_APPID-Werte liegen nur in der nicht getrackten .env.local — in der getrackten .env stehen dort Platzhalter invalid/asdf.)

3. APP_ENV=dev als Default in versionierter .env

.env:6 setzt APP_ENV=dev. In Kombination mit dem Profiler-Issue führt ein Deployment, das APP_ENV=prod zu setzen vergisst, zum Debug-/Profiler-Modus mit voller Stacktrace-/Konfig-Offenlegung.
→ Empfehlung: sicherstellen, dass Produktion APP_ENV=prod/APP_DEBUG=0 erzwingt; ggf. den getrackten Default auf prod setzen und lokale Entwicklung über .env.local steuern.

4. CSRF-Schutz global deaktiviert

config/packages/framework.yaml:4#csrf_protection: true ist auskommentiert. Aktuell geringe Angriffsfläche (kaum klassische Formulare), aber relevant, sobald authentifizierte Formulare/Sessions hinzukommen.
→ Empfehlung: csrf_protection: true aktivieren.

5. .env.test mit Klartext-Default ADMIN_PASSWORD=123

.env.test (getrackt) enthält schwache Default-Credentials. Auch wenn nur Test-Env: kein reales Passwort in getrackte .env*-Dateien.


Erstellt im Rahmen eines automatisierten Sicherheits-/Qualitäts-Reviews. Bitte vor Umsetzung gegenprüfen.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions