docs: replace ASCII umlaut fallbacks with proper äöüß across all .md
Most German docs were written with `ue`/`ae`/`oe`/`ss` ASCII fallbacks (`fuer`, `aenderung`, `koennen`, `gemaess`) — relic from older toolchain constraints. Replaced 237 occurrences across 38 .md files with proper umlauts and ß so the docs read naturally. Substitutions are constrained to plain prose: fenced code blocks (```...```), inline code spans (`...`), markdown link targets `[..](..)`, and HTML comments are preserved verbatim. Path references like `docs/howto-erste-aenderung.md` keep their original (umlaut-replaced) filenames — only the surrounding prose is normalised. Tool: bin/fix-md-umlauts.py (idempotent — no-op on already-clean files). Re-runnable if ASCII fallbacks creep back in via copy-paste. Doc-link-check + doc-drift-check stay green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ Letzte Aktualisierung: 2026-03-14
|
||||
|
||||
Vollstaendige Erklaerung des Session-Lifecycle: Wann wird ein User abgemeldet, wann greift der Remember-Token, wie bleiben Frontend und Server synchron.
|
||||
|
||||
## Session-Lifecycle (Uebersicht)
|
||||
## Session-Lifecycle (Übersicht)
|
||||
|
||||
```
|
||||
Login (Passwort / SSO)
|
||||
@@ -35,7 +35,7 @@ Jeder Request (web/index.php)
|
||||
| Idle | 30 Min | 5 Min – 24 Std | Ja, bei jeder Aktivitaet | `session_idle_timeout_minutes` |
|
||||
| Absolute | 8 Std | 1 Std – 72 Std | Nein, nie | `session_absolute_timeout_hours` |
|
||||
|
||||
Pruefung in `web/index.php` (bei jedem Request):
|
||||
Prüfung in `web/index.php` (bei jedem Request):
|
||||
|
||||
```
|
||||
Idle: (now - last_activity) > idle_timeout → Timeout
|
||||
@@ -67,7 +67,7 @@ Quelle: `web/js/components/app-session-warning.js`
|
||||
|
||||
Problem ohne Keepalive: User scrollt 29 Min auf einer Seite → JS zeigt "aktiv", Server sagt "idle".
|
||||
|
||||
Loesung: Alle 5 Minuten prueft ein Intervall ob seit dem letzten Sync Interaktion stattfand. Falls ja → `POST /admin/session-ping/data` → Server-Timer zurueckgesetzt.
|
||||
Lösung: Alle 5 Minuten prüft ein Intervall ob seit dem letzten Sync Interaktion stattfand. Falls ja → `POST /admin/session-ping/data` → Server-Timer zurueckgesetzt.
|
||||
|
||||
| Szenario | Keepalive-Ping? |
|
||||
|----------|-----------------|
|
||||
@@ -100,12 +100,12 @@ DB: user_remember_tokens
|
||||
└─ last_used
|
||||
```
|
||||
|
||||
Selector und Token sind getrennt: Selector fuer schnellen DB-Lookup, Token-Hash fuer timing-sichere Validierung. Kein Klartext-Token in der DB.
|
||||
Selector und Token sind getrennt: Selector für schnellen DB-Lookup, Token-Hash für timing-sichere Validierung. Kein Klartext-Token in der DB.
|
||||
|
||||
### Auto-Login-Ablauf
|
||||
|
||||
1. Kein aktiver Session-User → Remember-Cookie lesen
|
||||
2. Rate-Limit pruefen (IP nicht blockiert?)
|
||||
2. Rate-Limit prüfen (IP nicht blockiert?)
|
||||
3. Selector → DB-Lookup
|
||||
4. Token → `hash_equals(SHA256)` Verify
|
||||
5. User aktiv? Token nicht abgelaufen?
|
||||
@@ -125,7 +125,7 @@ Quelle: `core/Service/Auth/RememberMeRateLimiter.php`
|
||||
- Fail-open: Bei Memcached-Ausfall wird nicht blockiert
|
||||
- Erfolgreicher Auto-Login setzt Counter zurueck
|
||||
|
||||
Siehe `/docs/howto-anfragelimits.md` fuer alle Rate-Limits.
|
||||
Siehe `/docs/howto-anfragelimits.md` für alle Rate-Limits.
|
||||
|
||||
## Zusammenspiel Absolute Timeout + Remember-Token
|
||||
|
||||
@@ -137,7 +137,7 @@ Login → 8h Absolute Timeout → Session endet
|
||||
└─ NEIN → Login-Seite
|
||||
```
|
||||
|
||||
Solange der Remember-Token lebt (Default 30 Tage), bekommt der User nach Ablauf des Absolute-Timeout automatisch eine neue Session. Der Uebergang ist nahtlos (kein Flash, kein Login-Screen).
|
||||
Solange der Remember-Token lebt (Default 30 Tage), bekommt der User nach Ablauf des Absolute-Timeout automatisch eine neue Session. Der Übergang ist nahtlos (kein Flash, kein Login-Screen).
|
||||
|
||||
Das bedeutet: Mit aktivem Remember-Token ist die effektive Session-Dauer nicht 8 Stunden, sondern bis zu 30 Tage. Das ist by-design, sollte aber bei Compliance-Anforderungen (z. B. echte Re-Authentifizierung nach X Stunden) beruecksichtigt werden.
|
||||
|
||||
@@ -148,9 +148,9 @@ Das bedeutet: Mit aktivem Remember-Token ist die effektive Session-Dauer nicht 8
|
||||
| `httponly` | `true` | Kein JS-Zugriff (XSS-Schutz) |
|
||||
| `samesite` | `Lax` | CSRF-Schutz bei Cross-Site-Navigation |
|
||||
| `secure` | dynamisch | `true` bei HTTPS, `false` bei HTTP (Dev) |
|
||||
| `path` | `/` | Gueltig fuer gesamte Domain |
|
||||
| `path` | `/` | Gueltig für gesamte Domain |
|
||||
|
||||
Das Secure-Flag wird automatisch anhand des Protokolls gesetzt (`RequestRuntime::isSecure()`). In Produktion muss HTTPS ueber Nginx erzwungen werden (Redirect 80→443 + HSTS).
|
||||
Das Secure-Flag wird automatisch anhand des Protokolls gesetzt (`RequestRuntime::isSecure()`). In Produktion muss HTTPS über Nginx erzwungen werden (Redirect 80→443 + HSTS).
|
||||
|
||||
## Audit-Events
|
||||
|
||||
@@ -165,7 +165,7 @@ Das Secure-Flag wird automatisch anhand des Protokolls gesetzt (`RequestRuntime:
|
||||
|
||||
| Komponente | Pfad |
|
||||
|------------|------|
|
||||
| Timeout-Pruefung | `web/index.php` |
|
||||
| Timeout-Prüfung | `web/index.php` |
|
||||
| AuthService | `core/Service/Auth/AuthService.php` |
|
||||
| RememberMeService | `core/Service/Auth/RememberMeService.php` |
|
||||
| RememberMeRateLimiter | `core/Service/Auth/RememberMeRateLimiter.php` |
|
||||
|
||||
Reference in New Issue
Block a user