4.2 KiB
Sicherheit
Authentifizierung
JWT (JSON Web Token)
StreamDock verwendet JWT-basierte Authentifizierung:
- Algorithmus: HMAC-SHA256
- Gültigkeit: 24 Stunden
- Token-Inhalt (Claims):
user_id– Benutzer-IDusername– Benutzernamerole– Rolle (admin/user)iat– Ausstellungszeitpunktexp– Ablaufzeitpunktiss– Aussteller (StreamDock)
Token-Übermittlung
Das JWT-Token kann auf drei Wegen übermittelt werden (in Prioritätsreihenfolge):
- Authorization Header:
Authorization: Bearer <token> - Cookie:
streamdock_token=<token> - 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:
AuthMiddleware– Prüft JWT-Signatur und Ablauf, setzt Benutzer-KontextAdminOnly– 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