fix: echtes Session-Modell statt Query-Param-Token & Klartext-Secret #2
Loading…
Reference in a new issue
No description provided.
Delete branch "a2/session-model-hardening"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zusammenfassung
Löst die vier verbliebenen DeepSeek-R1-Funde aus PR #1 (siehe
todo_partner-portal-kampagne-2027.md, Etappe 5, Abschnitt "Neu — aus DeepSeek-R1-Review von PR #1"), die bewusst nicht als Reflex-Fix behandelt wurden, sondern ein echtes Session-Design brauchten:/auth/verify?...Redirect-URL und/api/partner/dashboard?token=— leckt über Referrer-Header, Browser-Historie, Proxy-Logs. Jetzt:HttpOnly; Secure; SameSite=Lax-Cookie (ks_partner_session). Die Partner-Identität kommt ausschließlich aus dem Cookie,/api/partner/dashboardbraucht kein?id=mehr.magic_link_tokensundpartner_sessionsmitexpires_at.audit_log.details(verstößt gegen Append-only-Prinzip für Audit-Trails). Jetzt:magic_link_tokens.consumed_at,audit_logbleibt vollständig unangetastet.partners.dashboard_token(Klartext) ist komplett entfernt. Nur SHA-256-Hashes inmagic_link_tokens.token_hash/partner_sessions.session_token_hash; Klartext existiert nur transient im Mail-Link bzw. Cookie.Bonus: Re-Freigabe eines Partners (neue Tier-Stufe durch André) widerruft jetzt automatisch alle bestehenden Sessions (
revokeAllSessions) — ein offenes altes Browser-Tab läuft nicht mit veralteten Rabattdaten weiter.Refactor: Token-Verifikation aus
api/admin/approve.jsin eigenes Modulsrc/core/auth/session.jsausgelagert (Separation of Concerns, von DeepSeek-R1 als Wartbarkeits-Punkt genannt).Migration
Kein Migrationsschritt nötig — die produktive
data/partner.dbauf maci ist noch leer (frisch deployter Prozess, PR #1 wurde erst vor Kurzem gemergt), keine echten Partner-Datensätze betroffen.Test plan
npm test— 31/31 grün (2 neue Tests: Re-Approve widerruft alte Session, Session-Cookie-Attribute HttpOnly/Secure im Freigabe-Flow geprüft)git pull --ff-only && pm2 reload kurven-schule-partnerauf maci, Smoke-Testcurl -c - https://partner.kurvenschule.cloud/health🤖 Generated with Claude Code