/** * Globale Security-Header für Nitro (Nuxt 3). * * Apache setzt ggf. bereits Header – diese Middleware dient als "Default", * damit die App auch ohne Reverse-Proxy sauber gehärtet ist. * * CSP ist optional und sollte zuerst im Report-Only Modus getestet werden. * Siehe ENV: * - CSP_ENABLED=true|false * - CSP_REPORT_ONLY=true|false * - CSP_VALUE="..." */ export default defineEventHandler((event) => { // Grundsätzlich sinnvolle Header setHeader(event, 'X-Content-Type-Options', 'nosniff') setHeader(event, 'Referrer-Policy', 'strict-origin-when-cross-origin') setHeader(event, 'Permissions-Policy', 'geolocation=(), microphone=(), camera=()') // X-Frame-Options entfernt - verwenden CSP frame-ancestors stattdessen // CSP frame-ancestors ist moderner und unterstützt mehrere Domains // Legacy-Header (optional; moderne Browser verlassen sich primär auf CSP) setHeader(event, 'X-XSS-Protection', '0') // Frame-Ancestors (für Einbettung von harheimertc.de erlauben) const allowedFrameAncestors = process.env.FRAME_ANCESTORS || "'self' https://harheimertc.de https://www.harheimertc.de" // Optional: Vollständige CSP const cspEnabled = (process.env.CSP_ENABLED || '').toLowerCase() === 'true' if (cspEnabled) { const reportOnly = (process.env.CSP_REPORT_ONLY || 'true').toLowerCase() !== 'false' const cspValue = process.env.CSP_VALUE || [ "default-src 'self'", "base-uri 'self'", "object-src 'none'", `frame-ancestors ${allowedFrameAncestors}`, // Nuxt lädt Fonts ggf. von Google (siehe nuxt.config.js) "font-src 'self' https://fonts.gstatic.com data:", "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com", // Script: Nuxt kann in Dev eval nutzen; diese CSP ist primär für Produktion gedacht. "script-src 'self'", "img-src 'self' data: blob:", "connect-src 'self'" ].join('; ') setHeader(event, reportOnly ? 'Content-Security-Policy-Report-Only' : 'Content-Security-Policy', cspValue) } else { // Wenn CSP nicht aktiviert ist, setze nur frame-ancestors setHeader(event, 'Content-Security-Policy', `frame-ancestors ${allowedFrameAncestors}`) } })