Das NelmioSecurityBundle macht es einfach, wichtige HTTP-Security-Header in Symfony-Projekten zu setzen. Statt diese Header manuell im Webserver zu konfigurieren, verwaltet man alles zentral in einer YAML-Datei — versioniert, nachvollziehbar, deploybar.
nelmio_security.yaml
nelmio_security:
content_type:
nosniff: true
forced_ssl:
hsts_max_age: 31536000
hsts_subdomains: true
hsts_preload: true
clickjacking:
paths:
'^/.*': SAMEORIGIN
referrer_policy:
enabled: true
policies:
- 'strict-origin-when-cross-origin'
permissions_policy:
enabled: true
policies:
geolocation: []
microphone: []
camera: []
csp:
enforce:
default-src:
- "'self'"
script-src:
- "'self'"
- "'unsafe-inline'"
- "data:"
- "https://cloud.ccm19.de"
- "https://challenges.cloudflare.com"
style-src:
- "'self'"
- "'unsafe-inline'"
- "https://cloud.ccm19.de"
img-src:
- "'self'"
- "data:"
- "https://cloud.ccm19.de"
- "https://tile.openstreetmap.org"
- "https://*.tile.openstreetmap.org"
connect-src:
- "'self'"
- "https://api.iconify.design"
- "https://cloud.ccm19.de"
- "https://challenges.cloudflare.com"
font-src:
- "'self'"
frame-src:
- "https://www.youtube-nocookie.com"
- "https://challenges.cloudflare.com"
object-src:
- "'none'"
base-uri:
- "'self'"
Ein paar Anmerkungen dazu:
- HSTS mit einem Jahr Laufzeit und Preload — damit landet die Domain im Browser-Preload-List
- CSP erlaubt nur explizit gelistete Quellen; unsafe-inline für Scripts und Styles ist ein Kompromiss, der durch CCM19 (Cookie-Banner) notwendig ist
- Permissions Policy deaktiviert Kamera, Mikrofon und Geolocation — Features, die diese Website nicht braucht
Das Bundle ist ein schneller Weg, den Security-Score bei Tools wie Mozilla Observatory deutlich zu verbessern.