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.