CSP: Inline-Styles entfernt, Policy vom Build erzeugen lassen

Ein CSP-Header im Reverse-Proxy hat die Seite still zerlegt: Astro liefert
seine Skripte als inline type=module aus, "script-src 'self'" blockiert die.
Im Browser blieb data-reveal leer und das Mobilmenue reagierte nicht, ohne
dass eine Fehlermeldung sichtbar war.

Astro kennt die Hashes seiner eigenen Bundles, deshalb setzt jetzt der Build
die Policy per <meta> (security.csp in astro.config.mjs).

Damit die Policy auch fuer Styles streng bleiben kann, sind die letzten drei
style-Attribute raus: sobald eine CSP Hashes fuer Styles enthaelt, ignorieren
Browser 'unsafe-inline', inline gesetzte Farben waeren also ohnehin verloren.

- Laserstrahlen im Hero: .beam-1 bis .beam-5 im <style>-Block
- Genre-Akzentfarben: .accent-<name> statt berechnetem style-Attribut

Geprueft im Browser hinter Caddy: Skripte laufen, Laser-Winkel und
Akzentfarben stimmen, keine Verstoesse in der Konsole.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 23:03:57 +02:00
co-authored by Claude Opus 5
parent 50150639ee
commit de7e8e3c37
3 changed files with 60 additions and 25 deletions
+20
View File
@@ -16,6 +16,26 @@ export default defineConfig({
integrations: [sitemap()],
// Content-Security-Policy. Astro kennt seine eigenen gebuendelten Skripte und
// Styles und traegt deren SHA-256-Hashes automatisch nach - deshalb wird die
// Policy hier gesetzt und nicht im Reverse-Proxy: der weiss von den Hashes
// nichts und wuerde die Inline-Module blockieren.
security: {
csp: {
directives: [
"default-src 'self'",
"img-src 'self' data:",
"font-src 'self'",
"connect-src 'self'",
"form-action 'self'",
"base-uri 'self'",
"object-src 'none'",
],
scriptDirective: { resources: ["'self'"] },
styleDirective: { resources: ["'self'"] },
},
},
image: {
// Bilder werden beim Build zu AVIF/WebP konvertiert.
responsiveStyles: true,