4.5 KiB
4.5 KiB
Feature Testplan: Admin-Session-Sicherheit
Ziel
Sicherstellen, dass die neue serverseitige Admin-Authentifizierung (Session + CSRF) korrekt funktioniert, keine Secrets mehr im Frontend landen und bestehende Upload-/Management-Flows weiterhin laufen.
Voraussetzungen
ADMIN_SESSION_SECRETist gesetzt – bei Dev indocker/dev/backend/config/.env, bei Prod indocker/prod/backend/.env. Wert peropenssl rand -hex 32generieren.- Docker-Stack läuft (
./dev.shbzw.docker compose -f docker/dev/docker-compose.yml up -dfür Dev oderdocker compose -f docker/prod/docker-compose.yml up -dfür Prod). - Browser-Cookies gelöscht bzw. neue Session (Inkognito) verwenden.
curlundjqlokal verfügbar (CLI-Aufrufe), Build/Tests laufen innerhalb der Docker-Container.
Testumgebungen
| Umgebung | Zweck |
|---|---|
docker/dev (localhost) |
Haupt-Testumgebung, schnelle Iteration |
| Backend-Jest Tests | Regression für API-/Auth-Layer |
Frontend Build (docker compose exec frontend-dev npm run build) |
Sicherstellen, dass keine Secrets im Bundle landen |
Testfälle
1. Initiales Admin-Setup
curl -c cookies.txt http://localhost:5001/auth/setup/status→needsSetupprüfen.- Falls
true:curl -X POST -H "Content-Type: application/json" -c cookies.txt -b cookies.txt \ -d '{"username":"admin","password":"SuperSicher123"}' \ http://localhost:5001/auth/setup/initial-admin→success: true, Cookie gesetzt. curl -b cookies.txt http://localhost:5001/auth/setup/status→needsSetup:false,hasSession:true.curl -b cookies.txt http://localhost:5001/auth/logout→ 204, Cookie weg.
2. Login & CSRF (Backend-Sicht)
curl -X POST -H "Content-Type: application/json" -c cookies.txt -b cookies.txt \ -d '{"username":"admin","password":"SuperSicher123"}' http://localhost:5001/auth/login.CSRF=$(curl -sb cookies.txt http://localhost:5001/auth/csrf-token | jq -r '.csrfToken').curl -b cookies.txt -H "X-CSRF-Token: $CSRF" http://localhost:5001/api/admin/groups→ 200.- Fehlerfälle prüfen:
- Ohne Cookie → 403
{ reason: 'SESSION_REQUIRED' }. - Mit Cookie aber ohne Token → 403
{ reason: 'CSRF_INVALID' }. - Mit falschem Token → 403
{ reason: 'CSRF_INVALID' }.
- Ohne Cookie → 403
3. Moderations-UI (Frontend)
- Browser auf
http://localhost:3000/moderation→ Login oder Setup-Wizard erscheint. - Wizard ausfüllen (nur beim ersten Start).
- Normales Login durchführen (korrekte & falsche Credentials testen).
- Nach Login folgende Aktionen validieren (Network-Tab kontrollieren: Requests senden Cookies +
X-CSRF-Token):- Gruppenliste lädt.
- Gruppe approve/reject.
- Cleanup-Preview/-Trigger (falls Daten vorhanden).
- Social-Media-Einstellungen laden/speichern.
- Logout in der UI → Redirect zum Login, erneutes Laden zeigt Login.
- Browser-Refresh nach Logout → kein Zugriff auf Admin-Daten (sollte Login anzeigen).
4. Regression Upload & Management
- Normales Upload-Formular durchspielen (
/): Gruppe hochladen. - Management-Link (
/manage/:token) öffnen, Consents ändern, Bilder verwalten. - Sicherstellen, dass neue Session-Mechanik nichts davon beeinflusst.
5. Öffentliche APIs
curl http://localhost:5001/api/social-media/platforms→ weiterhin öffentlich verfügbar.- Slideshow & Gruppenübersicht im Frontend testen (
/slideshow,/groups).
6. Bundle-/Secret-Prüfung
- Dev-Stack:
docker compose -f docker/dev/docker-compose.yml exec frontend-dev npm run build(Prod analog mitdocker/prod). docker compose -f docker/dev/docker-compose.yml exec frontend-dev sh -c "grep -R 'ADMIN' build/"→ keine geheimen Variablen (nur Dokumentationsstrings erlaubt).- Falls doch Treffer: Build abbrechen und Ursache analysieren.
7. Automatisierte Tests
- Backend:
docker compose -f docker/dev/docker-compose.yml exec backend-dev npm test(neue Auth-Tests müssen grün sein). - Optional:
docker compose -f docker/dev/docker-compose.yml exec frontend-dev npm testoder vorhandene E2E-Suite per Container laufen lassen.
8. CI/Monitoring Checks
- Pipeline-Schritt hinzunehmen, der
curl-Smoke-Test (Login +GET /api/admin/groups) fährt. - Optionaler Script-Check, der das Frontend-Bundle auf Secrets scannt.
Testabschluss
- Alle oben genannten Schritte erfolgreich? → Feature gilt als verifiziert.
- Offene Findings dokumentieren in
FeatureRequests/FEATURE_PLAN-security.md(Status + Follow-up). - Nach Freigabe: Reviewer informieren, Deploy-Plan (z. B. neue Session-Secret-Verteilung) abstimmen.