[LOW] Frontend-Härtung: DOMPurify vor {@html}, Timer-Leaks, svelte-check-Typfehler #119

Closed
opened 2026-06-20 14:41:09 +00:00 by chinux · 3 comments
Owner

Schweregrad: LOW-MEDIUM (Frontend, Sammel)

  • DOMPurify vor {@html} (Defense-in-depth, 4 Stellen: notizen:188, settings:685, KpiRow:16, profil:234). Aktuell escape-first ohne Sanitizer; setupQr injiziert Backend-SVG roh, Notes potenziell mandantenuebergreifend (Bezug #108). Kein aktiver Vektor, aber haerten.
  • setInterval/clearInterval-Ungleichgewicht (~25 vs 18) → nicht-abgeraeumte Polling-Timer = Leak + unnoetige fetch-Last in langlebiger SPA; je Stelle onDestroy/$effect-Cleanup pruefen.
  • svelte-check-Typfehler beim Aufraeumen mitnehmen: InlineHostGraphs.svelte:110/111, NodeUpdatesPanel.svelte:874.

(Die grossen Monolithe +page.svelte / NodeUpdatesPanel sind bereits via #94/#95 erfasst.)

Quelle

Code-Review 20.06.2026.

## Schweregrad: LOW-MEDIUM (Frontend, Sammel) - **DOMPurify vor `{@html}`** (Defense-in-depth, 4 Stellen: `notizen:188`, `settings:685`, `KpiRow:16`, `profil:234`). Aktuell escape-first ohne Sanitizer; `setupQr` injiziert Backend-SVG roh, Notes potenziell mandantenuebergreifend (Bezug #108). Kein aktiver Vektor, aber haerten. - **setInterval/clearInterval-Ungleichgewicht** (~25 vs 18) → nicht-abgeraeumte Polling-Timer = Leak + unnoetige fetch-Last in langlebiger SPA; je Stelle `onDestroy`/`$effect`-Cleanup pruefen. - **svelte-check-Typfehler** beim Aufraeumen mitnehmen: `InlineHostGraphs.svelte:110/111`, `NodeUpdatesPanel.svelte:874`. (Die grossen Monolithe +page.svelte / NodeUpdatesPanel sind bereits via #94/#95 erfasst.) ## Quelle Code-Review 20.06.2026.
Author
Owner

Teil 1 (DOMPurify) umgesetzt in ad1e4e6: isomorphic-dompurify + $lib/sanitize (sanitizeHtml/sanitizeSvg) vor allen 4 {@html}-Sinks (notizen/settings renderMd, profil QR, KpiRow Icon). Offen: setInterval/clearInterval-Audit (Timer-Leaks) + svelte-check-Typfehler (InlineHostGraphs:110/111, NodeUpdatesPanel:874). Lasse offen.

Teil 1 (DOMPurify) umgesetzt in ad1e4e6: isomorphic-dompurify + $lib/sanitize (sanitizeHtml/sanitizeSvg) vor allen 4 {@html}-Sinks (notizen/settings renderMd, profil QR, KpiRow Icon). Offen: setInterval/clearInterval-Audit (Timer-Leaks) + svelte-check-Typfehler (InlineHostGraphs:110/111, NodeUpdatesPanel:874). Lasse offen.
Author
Owner

Teil-Check @ 812b59f: lib/sanitize.ts + dompurify-Dependency sind eingeführt . Offen/zu verifizieren: tatsächlicher Einsatz an allen 4 {@html}-Stellen (notizen/settings/KpiRow/profil), Timer-Leaks (setInterval/clearInterval-Ungleichgewicht) und die svelte-check-Typfehler. Bleibt offen bis vollständig.

**Teil-Check @ 812b59f:** `lib/sanitize.ts` + dompurify-Dependency sind eingeführt ✅. Offen/zu verifizieren: tatsächlicher Einsatz an allen 4 `{@html}`-Stellen (notizen/settings/KpiRow/profil), Timer-Leaks (setInterval/clearInterval-Ungleichgewicht) und die svelte-check-Typfehler. Bleibt offen bis vollständig.
Author
Owner

Erledigt unter #186 Paket D (commit `38e0530`).

  • svelte-check: `InlineHostGraphs.svelte` ungültiges `title`-Attr auf `` → `
Erledigt unter #186 Paket D (commit \`38e0530\`). - svelte-check: \`InlineHostGraphs.svelte\` ungültiges \`title\`-Attr auf \`<line>\` → \`<title>\`-Kindelement (2×); \`NodeUpdatesPanel.svelte\` \`use:autoScroll\` ohne Param → \`={true}\`. **0 ERRORS** (vorher 3). - \`{@html}\`: alle 4 Sinks (settings/profil/notizen/KpiRow) nutzen bereits \`sanitizeHtml\`/\`sanitizeSvg\` — keine Änderung nötig. - Timer: alle **9** \`setInterval\`-Aufrufe sind mit \`clearInterval\` in onDestroy/onMount-Return/$effect-Return gepaart — **kein Leak**. Die "19 vs 14"-Differenz im Issue sind 10 \`ReturnType<typeof setInterval>\`-**Typdeklarationen**, keine Timer. **Akzeptanz D erfüllt:** alle {@html} sanitisiert; keine ungepaarten Timer; keine neuen svelte-check-Fehler.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chinux/theProx#119
No description provided.