Files
djnizz-website/astro.config.mjs
T
Nizz05andClaude Opus 5 de7e8e3c37 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>
2026-08-18 23:03:57 +02:00

48 lines
1.4 KiB
JavaScript

// @ts-check
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
import sitemap from '@astrojs/sitemap';
import tailwindcss from '@tailwindcss/vite';
// https://astro.build/config
export default defineConfig({
// Muss mit SITE.url in src/data/site.ts uebereinstimmen.
site: 'https://djnizz.at',
// Alle Seiten werden beim Build vorgerendert (maximale Performance).
// Der Node-Adapter serviert sie und erlaubt es, spaeter einzelne Routen
// (z. B. /api/booking) mit `export const prerender = false` dynamisch zu machen.
adapter: node({ mode: 'standalone' }),
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,
},
vite: {
plugins: [tailwindcss()],
},
});