Files
streamdock/docs/sicherheit.md
2026-04-12 22:50:50 +02:00

4.2 KiB
Raw Permalink Blame History

Sicherheit

Authentifizierung

JWT (JSON Web Token)

StreamDock verwendet JWT-basierte Authentifizierung:

  • Algorithmus: HMAC-SHA256
  • Gültigkeit: 24 Stunden
  • Token-Inhalt (Claims):
    • user_id Benutzer-ID
    • username Benutzername
    • role Rolle (admin/user)
    • iat Ausstellungszeitpunkt
    • exp Ablaufzeitpunkt
    • iss Aussteller (StreamDock)

Token-Übermittlung

Das JWT-Token kann auf drei Wegen übermittelt werden (in Prioritätsreihenfolge):

  1. Authorization Header: Authorization: Bearer <token>
  2. Cookie: streamdock_token=<token>
  3. Query-Parameter: ?token=<token> (Fallback für Streaming)

Passwort-Hashing

  • Algorithmus: bcrypt (Golang-Standard-Cost)
  • Passwörter werden niemals im Klartext gespeichert
  • Passwort-Änderung erfordert das aktuelle Passwort

Zugriffskontrolle

Middleware

Alle geschützten Endpunkte durchlaufen die Auth-Middleware:

  1. AuthMiddleware Prüft JWT-Signatur und Ablauf, setzt Benutzer-Kontext
  2. AdminOnly Zusätzliche Prüfung der Admin-Rolle

Datenisolierung

  • Alle Datenbank-Queries verwenden WHERE user_id = ?
  • Benutzer können keine fremden Daten lesen, ändern oder löschen
  • Share-Links ermöglichen kontrollierten öffentlichen Zugriff mit Token

Container-Sicherheit

Non-Root Prozess

Die Anwendung läuft als dedizierter Benutzer streamdock innerhalb des Containers:

RUN adduser -D -h /app streamdock

Der Entrypoint (su-exec) sorgt dafür, dass der Go-Prozess ohne Root-Rechte ausgeführt wird.

Kein Rootless Docker

Aktueller Stand: Der Docker-Daemon selbst läuft mit Root-Rechten (Standard-Docker-Installation). Die Anwendung im Container läuft als Non-Root-User, der Docker-Daemon jedoch nicht.

Empfehlung für die Zukunft: Migration zu Rootless Docker für erhöhte Host-Sicherheit. Dies betrifft die Docker-Installation auf dem Host-System, nicht den Container selbst.

Statisches Binary

  • CGO_ENABLED=0 Keine C-Abhängigkeiten
  • Minimales Alpine-Image Reduzierte Angriffsfläche
  • Kein SSH, kein Shell-Zugang im Container nötig

CORS (Cross-Origin Resource Sharing)

  • CORS ist konfigurierbar über STREAMDOCK_BASE_URL
  • Standardmäßig erlaubt StreamDock nur Anfragen von der konfigurierten Base-URL
  • Credentials (Cookies) werden unterstützt

SQL-Injection Schutz

  • Alle Queries verwenden parametrisierte Statements (? Platzhalter)
  • Kein String-Concatenation in SQL-Queries
  • sqlx-Library mit automatischem Escaping

Empfehlungen für den Betrieb

Pflicht

Maßnahme Beschreibung
JWT-Secret ändern STREAMDOCK_JWT_SECRET mindestens 32 zufällige Zeichen
Admin-Passwort ändern STREAMDOCK_ADMIN_PASSWORD durch sicheres Passwort ersetzen

Dringend empfohlen

Maßnahme Beschreibung
HTTPS verwenden Reverse Proxy mit TLS-Zertifikat (Let's Encrypt)
Base-URL setzen STREAMDOCK_BASE_URL auf die tatsächliche Domain
Firewall einrichten Port 8080 nur über Reverse Proxy erreichbar

Optional

Maßnahme Beschreibung
Rootless Docker Docker-Daemon ohne Root-Rechte betreiben
Regelmäßige Backups data/-Verzeichnis regelmäßig sichern
Updates einspielen Container regelmäßig neu bauen

Bekannte Einschränkungen

Einschränkung Beschreibung
Alpha-Status Software befindet sich in aktiver Entwicklung; Sicherheitslücken sind möglich
Kein Rate-Limiting Aktuell kein eingebautes Rate-Limiting für API-Endpunkte
LocalStorage Token JWT wird clientseitig in localStorage gespeichert (XSS-Risiko)
Kein 2FA Keine Zwei-Faktor-Authentifizierung implementiert
Keine Audit-Logs Keine systematische Protokollierung sicherheitsrelevanter Aktionen

Warnung: StreamDock befindet sich im Alpha-Stadium und sollte nicht ungeschützt im Internet betrieben werden. Der Einsatz hinter einem VPN oder in einem vertrauenswürdigen Netzwerk wird empfohlen.


Weiter: Entwicklung