diff --git a/Sicherheit.md b/Sicherheit.md new file mode 100644 index 0000000..4a0a806 --- /dev/null +++ b/Sicherheit.md @@ -0,0 +1,74 @@ +# Sicherheit + +## Grundprinzip: Token niemals im Frontend + +Angular-Apps sind reine Client-Side-Anwendungen. Jeder Token in `environment.prod.ts` oder im Code landet nach `ng build` als Klartext in den JS-Bundles und ist für jeden sichtbar, der die DevTools öffnet. + +**Regel:** Der Directus API-Token gehört **ausschließlich** in den Nginx Proxy Manager. + +## .gitignore — was niemals ins Repository darf + +```gitignore +# Dev-Proxy mit Token +proxy.conf.json + +# Dev-Environment mit Token +src/environments/environment.ts + +# Build-Output +dist/ + +# Node-Module +node_modules/ +``` + +Vorlagen ohne Token werden committed: + +- `proxy.conf.example.json` +- `src/environments/environment.example.ts` + +## Token-Handling nach Umgebung + +| Umgebung | Token-Quelle | Token im Quellcode? | +| --- | --- | --- | +| `ng serve` (Dev) | `proxy.conf.json` (lokal, gitignored) | Nein | +| `ng build` (Prod) | Nginx Proxy Manager | Nein | +| Directus direkt | — | Nie | + +## Token kompromittiert — Sofortmaßnahmen + +1. Directus Admin-UI → **Settings** → **Access Tokens** → Token sofort löschen +2. Neuen Token erstellen +3. NPM Advanced Config aktualisieren +4. `proxy.conf.json` lokal aktualisieren +5. Testen ob alter Token wirklich ungültig ist: + +```bash +curl -H "Authorization: Bearer ALTER_TOKEN" \ + http://directus.neugasse.lan/items/landingpage +# Muss 403 zurückgeben +``` + +## Directus-Berechtigungen minimal halten + +Der API-Token sollte nur Lesezugriff auf die `landingpage`-Collection haben — kein Schreibzugriff, kein Zugriff auf andere Collections. + +In Directus Admin-UI → **Settings** → **Roles & Permissions** → Token-Rolle prüfen: + +- `landingpage`: Read ✓ +- Alle anderen Collections: kein Zugriff + +## Tasmota-Geräte + +- Steckdosen sind nur im LAN (`*.neugasse.lan`) erreichbar — kein externer Zugriff möglich +- Tasmota-WebUI sollte mit Passwort gesichert sein (`Configuration → Security`) +- Die HTTP-API der Steckdosen ist unverschlüsselt — ausreichend für LAN-Betrieb + +## Angriffsvektor-Übersicht + +| Vektor | Risiko | Mitigierung | +| --- | --- | --- | +| Token im JS-Bundle | Hoch | NPM-Proxy, kein Token im Code | +| Token im Git-Repository | Hoch | .gitignore, Token rotieren | +| Directus ohne Auth erreichbar | Mittel | Token erforderlich, Items auf `published` | +| Tasmota im Internet erreichbar | Niedrig | Nur LAN, kein Port-Forward | \ No newline at end of file