Clone
1
Sicherheit
SPP User edited this page 2026-11-01 22:12:42 +01:00
Sicherheit
Diese Seite fasst zusammen, wie die Anwendung mit Zugängen, Passwörtern und Eingaben umgeht. Sie beruht auf einer Prüfung vom November 2026, bei der sieben Schwachstellen gefunden und behoben wurden.
Zugänge
- Codes und Tokens: Teams und Zuschauer kommen über Codes auf die Webseite, der Organisator über einen geheimen Token. Wer was darf, steht unter Rollen und Rechte.
- Admin-Bereich: nur mit
ADMIN_PASSWORD, Anmeldeversuche sind begrenzt. Abgelaufene Anmeldungen werden entfernt. - Server-Passwörter: erzeugt die App pro Match. Spieler sehen das Spielerpasswort, Zuschauer nur den CSTV-Zugang. Das RCON-Passwort verlässt nie das Backend.
Stream-Schlüssel
Mit STREAM_KEY ist die Stream-Übersicht nur über /stream?key=<schlüssel> erreichbar.
- Der globale Schlüssel zeigt alle Matches. Ihn kennt nur, wer die
.envverwaltet. - Ein Organisator bekommt im Link „Match-Übersicht“ einen eigenen Schlüssel, der aus
STREAM_KEYabgeleitet ist und nur sein Match zeigt. Daraus lässt sich weder der globale Schlüssel noch ein Schlüssel für ein anderes Match gewinnen. - Ändert sich
STREAM_KEY, werden alle abgeleiteten Schlüssel ungültig.
Was gegen Fehler und Missbrauch abgesichert ist
| Bereich | Absicherung |
|---|---|
| Live-Verbindung (WebSocket) | Jede Nachricht wird geprüft, Fehler in der Verarbeitung beenden nie das Backend. Pro Verbindung sind 20 Abfragen am Stück erlaubt, danach 2 pro Sekunde. Vorher konnte eine einzige fehlerhafte Nachricht ohne Anmeldung das Backend beenden. |
| Fehlermeldungen | Meldungen von Docker und anderen Programmen werden bereinigt, bevor sie gespeichert oder angezeigt werden. Die Befehlszeile fällt weg, Werte wie *_PW, *TOKEN* oder *PASSWORD* und alle bekannten Passwörter des Servers werden geschwärzt. Vorher stand bei einem fehlgeschlagenen Start das RCON-Passwort in der öffentlichen Statusmeldung. |
| Live-Ergebnisse | Ausgewertet wird nur die ganze Systemzeile nach dem Zeitstempel. Chatzeilen von Spielern beginnen mit "Name<…>" und passen nie. Vorher konnte ein Spieler mit Game Over: … score 13:0 im Chat eine Map beenden. |
| Start, Stopp, Löschen | Kommt ein Serverstart erst an, nachdem der Server gestoppt, neu angefordert oder das Match gelöscht wurde, baut die App den neuen Container sofort wieder ab. Vorher konnten Container unbeobachtet weiterlaufen. |
| RCON | Kaputte Pakete trennen nur die Verbindung. Ein Befehl ohne jede Antwort gilt als Fehler (CS2 bestätigt auch Befehle ohne Ausgabe mit einem leeren Paket). Ausnahme ist changelevel, dort prüft die App das Laden der Map selbst. |
| Anfragen-Begrenzung | Die Zähler pro Adresse räumen sich regelmäßig auf und haben eine feste Obergrenze. |
| Ingame-Chat | Eingaben werden für say bereinigt, siehe Ingame-Hinweise. |
Die Tests dazu stehen in server/test/hardening.test.js.
Datenschutz
- Keine Cookies, kein Tracking. Im Browser speichert die Seite nur, was für die Bedienung nötig ist: den Match-Zugang (
localStorage), die Admin-Anmeldung für die Dauer des Tabs (sessionStorage), gelesene Chat-Nachrichten sowie Filter und Menüpunkt im Admin-Bereich. Ein Cookie-Banner ist dafür nicht nötig (unbedingt erforderliche Speicherung). - Keine Verbindung zu fremden Servern. Die Schriften (Barlow, Barlow Condensed) liefert die Anwendung selbst aus, nicht über Google Fonts. Dadurch geht keine IP-Adresse an Google, und die Seite funktioniert auch im LAN ohne Internet.
- Ist die Seite öffentlich erreichbar, braucht sie trotzdem Impressum und Datenschutzerklärung, z. B. als Link auf die von maxlan.de. Siehe Reverse-Proxy.
Das ist keine Rechtsberatung.