Live-Prüfung 08.10.2026: nginx beantwortet die Anfragen direkt (kein CDN, kein vorgeschalteter Proxy), die App vertraute aber jedem Proxy (trustProxies at '*'). Jeder Client konnte per X-Forwarded-For seine IP vorgeben und damit IP-Limits bei Login und Passwort-Reset umgehen sowie IP-Protokolle fälschen. Jetzt steuert config/trustedproxy.php das Vertrauen: lokal (Traefik) weiterhin '*', sonst keinem Proxy; ein späteres CDN kommt über TRUSTED_PROXIES dazu. HSTS fehlte auf Live. SecurityHeaders setzt Strict-Transport-Security auf HTTPS-Antworten, standardmäßig nur in Produktion (max-age 1 Jahr, bewusst ohne includeSubDomains/preload). phpunit.xml leert MONITORING_NTFY_*, damit Testläufe keine echten Push-Nachrichten mehr auslösen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
737 B
PHP
23 lines
737 B
PHP
<?php
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| HTTP Strict Transport Security
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Weist Browser an, die Domain für `max_age` Sekunden nur noch per HTTPS
|
|
| aufzurufen. Wird nur auf HTTPS-Antworten gesetzt und standardmäßig nur
|
|
| in Produktion. Bewusst ohne includeSubDomains und preload: beides
|
|
| lässt sich kaum zurücknehmen und betrifft auch fremd betriebene
|
|
| Subdomains.
|
|
|
|
|
*/
|
|
|
|
'hsts' => [
|
|
'enabled' => (bool) env('SECURITY_HSTS', env('APP_ENV') === 'production'),
|
|
'max_age' => (int) env('SECURITY_HSTS_MAX_AGE', 31536000),
|
|
],
|
|
|
|
];
|