Files
Multi-Debrid-Downloader/.superpowers/sdd/2026-08-11-hardening-performance-plan/task-3-report.md
T
Sucukdeluxe ebfd98226b feat: harden remote diagnostics authentication
Bind the diagnostics flow to bearer-only authentication and reject query token attempts with controlled responses. Compare bearer token bytes with timing-safe equality, remove wildcard CORS, and mark diagnostics/support responses as no-store.

Move trace configuration mutation behind POST, add method failure handling, add a small per-IP/loopback in-memory request limit, and keep generated setup and support-manifest URLs token-free while pointing support access at a local bridge/tunnel flow.

Sanitize backup remote diagnostics on export and restore so legacy token, endpoint, host mode, and port values are not persisted; restores only keep the allowlist and force local binding.

Tests cover bearer accept/reject, query rejection, GET mutation rejection, no-store/CORS behavior, loopback default binding, rate limiting, token-free hints, and backup sanitation.
2026-08-12 00:59:07 +02:00

2.1 KiB

Task 3 Report: Ferndiagnose-Authentifizierung

Status: umgesetzt.

Umgesetzt:

  • Ferndiagnose-Endpunkte akzeptieren nur noch Authorization: Bearer.
  • Query-Token werden kontrolliert mit query_token_rejected abgewiesen.
  • Tokenvergleich nutzt crypto.timingSafeEqual nur bei gleicher Byte-Länge.
  • Diagnoseantworten setzen Cache-Control: no-store und keine CORS-Wildcard.
  • Nicht erlaubte Methoden liefern kontrolliert method_not_allowed.
  • /trace/config liest per GET, Änderungen laufen nur noch per POST.
  • Pro IP beziehungsweise Loopback gibt es ein kleines In-Memory-Limit mit rate_limited.
  • Support-Manifest und Setup-Hinweise enthalten keine Token-URLs mehr und verweisen auf lokale Bridge/Tunnel-Nutzung.
  • Backup-Remote-Diagnostics werden beim Export und Restore auf Allowlist plus lokale Bindung saniert; Ports, Host-Modus, Tokens und Endpoint-Felder werden nicht übernommen.

TDD-Nachweis:

  • Baseline vor Teständerung: npm run test:client -- tests/debug-server.test.ts tests/debug-server-allowlist.test.ts tests/backup-remote-diagnostics.test.ts mit 33/33 grün.
  • RED nach Teständerung: gleicher fokussierter Lauf mit erwarteten Fehlschlägen für no-store, Query-Rejection, GET-Mutation, Methodengate, Rate-Limit und Backup-Sanitizing.
  • GREEN nach Implementierung: gleicher fokussierter Lauf mit 38/38 grün.

Verifikation:

  • npm run test:client -- tests/debug-server.test.ts tests/debug-server-allowlist.test.ts tests/backup-remote-diagnostics.test.ts
  • npx tsc --noEmit
  • npm run build
  • git diff --check -- src/main/debug-server.ts src/main/debug-setup.ts src/main/backup-payload.ts tests/debug-server.test.ts tests/debug-server-allowlist.test.ts tests/backup-remote-diagnostics.test.ts
  • Feste Suchstrings in den geänderten Main-Dateien ohne Treffer: ?token=, Access-Control-Allow-Origin, remoteBaseUrlTemplate, searchParams.get("token"), Bearer ${authToken}, Cache-Control": "no-cache.

Hinweise:

  • Kein Release, Push oder Deployment ausgeführt.
  • Der fokussierte Vitest-Lauf meldet weiterhin die bestehende Vite-CJS-Deprecation-Warnung.