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.
2.1 KiB
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_rejectedabgewiesen. - Tokenvergleich nutzt
crypto.timingSafeEqualnur bei gleicher Byte-Länge. - Diagnoseantworten setzen
Cache-Control: no-storeund keine CORS-Wildcard. - Nicht erlaubte Methoden liefern kontrolliert
method_not_allowed. /trace/configliest 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.tsmit 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.tsnpx tsc --noEmitnpm run buildgit 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.