import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; /* * Befund 66, behoben in Fassung 5.10.0. * * Die Inhaltssicherheitsrichtlinie steht an ZWEI wirksamen Stellen: als * Meta-Element, das ein Vite-Plugin in den Auslieferungsstand einsetzt * (`vite.config.ts`), und als Antwortkopf im Hauptprozess (`electron/main.ts`). * Beide fuehren `connect-src 'self' blob:`. * * Beschrieben wurde sie in den Unterlagen enger: Sie gaben `connect-src 'self'` * an - in genau dem Abschnitt, der einem Pruefer den Sicherheitsentwurf * erklaert. Die Offline-Zusage selbst bleibt richtig (eine blob-Adresse * erreicht keinen fremden Rechner); falsch war die woertliche Wiedergabe. * * Der Fall liest die Direktive aus den beiden wirksamen Stellen aus und haelt * sie gegeneinander. Wird `blob:` eines Tages gestrichen - es hat heute keinen * Aufrufer -, muss es an beiden Stellen geschehen. */ const VITE = readFileSync('vite.config.ts', 'utf8'); const HAUPTPROZESS = readFileSync('electron/main.ts', 'utf8'); /** Die Direktive `connect-src ...` aus einer Quelltextdatei. */ function connectSrc(quelle: string, wo: string): string { const treffer = /connect-src [^;"'`]*(?:'[^']*'[^;"`]*)*/.exec(quelle); expect(treffer, `connect-src in ${wo} nicht gefunden`).not.toBeNull(); return treffer![0].trim(); } describe('Inhaltssicherheitsrichtlinie - die beiden wirksamen Stellen', () => { it('fuehren Meta-Element und Antwortkopf dieselbe Direktive', () => { expect(connectSrc(VITE, 'vite.config.ts')).toBe(connectSrc(HAUPTPROZESS, 'electron/main.ts')); }); });