Status: Accepted
Datum: 2026-01-22
Kontext: Veröffentlichung der Dokumentation als GitHub Pages Entscheider: Gernot Starke
Kontext und Problem
Aquarius ist primär eine Fallstudie für Softwarearchitektur-Trainings (z.B. iSAQB). Die Architekturdokumentation enthält “Lösungen” und Hintergründe, die Teilnehmende von Trainings idealerweise erst im Laufe der Übungen erarbeiten oder sehen sollen.
Wäre die Dokumentation öffentlich auf GitHub Pages gehostet, so wären diese Informationen für jedermann (inklusive Trainingsteilnehmer vor dem Training) frei zugänglich.
Anforderungen:
- Hürde: Der Zugriff auf spezifische Bereiche (z.B.
/architecture/*,/challenges/*) soll (etwas) erschwert werden. - Einfachheit: Keine komplexe Server-Side-Authentication (da GitHub Pages statisch ist).
- Keine Hochsicherheit: Es geht nicht um den Schutz von Geschäftsgeheimnissen oder persönlichen Daten, sondern um didaktische Spoiler-Vermeidung. Ein technisch versierter Nutzer kann den Schutz umgehen (Client-Side), das ist akzeptabel.
- Konfigurierbarkeit: Das Passwort muss leicht änderbar sein.
Entscheidung
Wir implementieren einen Client-seitigen Passwortschutz via JavaScript für sensitive Bereiche der Dokumentation.
Technische Umsetzung
- Layout-basiert: Ein spezielles Jekyll-Layout (
protected) prüft beim Laden, ob ein valides Session-Token (imsessionStorage) vorhanden ist. - Client-Side Hashing:
- Das korrekte Passwort wird als SHA-256 Hash in der
_config.ymlhinterlegt (protected_password_hash). - Bei Eingabe wird das Passwort des Nutzers gehasht und mit dem hinterlegten Hash verglichen.
- Es wird kein Klartext-Passwort im Quellcode gespeichert.
- Das korrekte Passwort wird als SHA-256 Hash in der
- Obfuskation: Das JavaScript, das die Prüfung vornimmt, wird minifiziert und leicht obfuskiert, um triviales “Nachlesen” im Browser-Debugger zu erschweren (aber nicht unmöglich zu machen).
Konfiguration
Ein Hash des Passwortes wird in der zentralen Konfigurationsdatei docs/_config.yml verwaltet:
# docs/_config.yml
protected_password_hash: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" # Beispiel-Hash
Ein Makefile-Target unterstützt das Generieren neuer Hashes:
make protect-hash PASSWORD=neuesPasswort123
Standardmäßig ist das Passwort auf training2026 gesetzt (Stand Jan 2026).
Konsequenzen
Positiv
- Spoiler-Schutz: Teilnehmer können nicht “aus Versehen” die Lösungen sehen.
- Hosting-Unabhängigkeit: Funktioniert auf jedem statischen Webserver (GitHub Pages, Netlify, lokal).
- Keine Backend-Kosten: Keine Datenbank oder Auth-Server notwendig.
Negativ
- Keine echte Sicherheit: Wer JavaScript deaktiviert oder den Quellcode analysiert, kann den Hashwert des Passwortes auslesen.
- UX: Nutzer müssen ein Passwort eingeben (Session bleibt aber erhalten).
Sicherheitshinweis
Diese Lösung bietet keinen kryptographischen Schutz. Für sensible Daten (Credentials) ist dieser Ansatz nicht geeignet und darf dafür nicht verwendet werden. Für den didaktischen Zweck (Spoiler-Schutz) ist er jedoch adäquat und verhältnismäßig.