lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ tests domain sicherheitsrichtlinie.test.ts

1,6 KB Rohdatei
tests/domain/sicherheitsrichtlinie.test.ts — 36 Zeilen
1 import { readFileSync } from 'node:fs';
2 import { describe, expect, it } from 'vitest';
3
4 /*
5 * Befund 66, behoben in Fassung 5.10.0.
6 *
7 * Die Inhaltssicherheitsrichtlinie steht an ZWEI wirksamen Stellen: als
8 * Meta-Element, das ein Vite-Plugin in den Auslieferungsstand einsetzt
9 * (`vite.config.ts`), und als Antwortkopf im Hauptprozess (`electron/main.ts`).
10 * Beide fuehren `connect-src 'self' blob:`.
11 *
12 * Beschrieben wurde sie in den Unterlagen enger: Sie gaben `connect-src 'self'`
13 * an - in genau dem Abschnitt, der einem Pruefer den Sicherheitsentwurf
14 * erklaert. Die Offline-Zusage selbst bleibt richtig (eine blob-Adresse
15 * erreicht keinen fremden Rechner); falsch war die woertliche Wiedergabe.
16 *
17 * Der Fall liest die Direktive aus den beiden wirksamen Stellen aus und haelt
18 * sie gegeneinander. Wird `blob:` eines Tages gestrichen - es hat heute keinen
19 * Aufrufer -, muss es an beiden Stellen geschehen.
20 */
21
22 const VITE = readFileSync('vite.config.ts', 'utf8');
23 const HAUPTPROZESS = readFileSync('electron/main.ts', 'utf8');
24
25 /** Die Direktive `connect-src ...` aus einer Quelltextdatei. */
26 function connectSrc(quelle: string, wo: string): string {
27 const treffer = /connect-src [^;"'`]*(?:'[^']*'[^;"`]*)*/.exec(quelle);
28 expect(treffer, `connect-src in ${wo} nicht gefunden`).not.toBeNull();
29 return treffer![0].trim();
30 }
31
32 describe('Inhaltssicherheitsrichtlinie - die beiden wirksamen Stellen', () => {
33 it('fuehren Meta-Element und Antwortkopf dieselbe Direktive', () => {
34 expect(connectSrc(VITE, 'vite.config.ts')).toBe(connectSrc(HAUPTPROZESS, 'electron/main.ts'));
35 });
36 });