Phase B2: mehrere Domains fuer Kurz-URLs
Eine Domain kann mehreren Gruppen dienen (n:m ueber DomainGrant), und der Slug eines Codes ist nur noch je Domain eindeutig - derselbe sprechende Slug darf also auf zwei Domains liegen. Sicherheitsrelevanter Kern: die Weiterleitung liest den Hostnamen aus X-Forwarded-Host bzw. Host und prueft ihn gegen die Domain-Tabelle. Ein unbekannter Hostname endet mit 404, faellt also auf die Standard-Domain zurueck und findet dort nichts. Ueber einen gefaelschten Header laesst sich damit keine fremde Domain ansprechen. Auch der Hostname fuer die Vorschau kommt aus der Datenbank, nicht aus der Anfrage. - Migration legt die Spalte erst nullable an, fuellt sie mit der Standard-Domain und macht sie danach verpflichtend; der globale Slug-Index weicht dem zusammengesetzten aus (domainId, slug). - Verwaltung -> Domains: registrieren, Gruppen zuteilen, Voreinstellung je Gruppe, abschalten. Domains mit Codes lassen sich weder loeschen noch einer Gruppe entziehen, die noch Codes darunter hat - beides wuerde gedruckte Codes ins Leere laufen lassen. Ein Fehler dabei gefunden und behoben: die Migration kennt BASE_URL nicht und legt die Standard-Domain mit einem Platzhalter-Hostnamen an. Korrigiert wurde er bisher nur beim Oeffnen der Domain-Verwaltung - auf einer frischen Installation waeren also Kurz-URLs auf 'standard.invalid' entstanden. ensureDefaultDomain() laeuft jetzt vor jeder Verwendung. Geprueft: 34 neue Pruefungen fuer Host-Aufloesung, Spoofing, Slug je Domain und Zuteilung; dazu 280 bestehende bei ausgeschalteter Anmeldung.
This commit is contained in:
@@ -209,9 +209,28 @@ docker compose up -d
|
||||
> aufrufen. Steht dort weiterhin `http://192.168.1.50:3000`, zeigen neue
|
||||
> dynamische Codes ins interne Netz statt auf die Domain.
|
||||
|
||||
Mehrere Domains gleichzeitig unterstützt diese Version noch nicht — das kommt
|
||||
in Phase B (siehe [Ausblick](#ausblick-version-2)). Zurzeit gilt genau eine
|
||||
`BASE_URL`.
|
||||
### Mehrere Domains
|
||||
|
||||
Sollen Kurz-URLs unter verschiedenen Adressen laufen — etwa je Kunde eine —,
|
||||
lege sie unter **Verwaltung → Domains** an und richte im Proxy für jede einen
|
||||
eigenen Proxy Host auf dieselbe Anwendung ein.
|
||||
|
||||
Die Weiterleitung erkennt am `Host`-Header, welche Domain gemeint ist, und
|
||||
prüft ihn gegen die registrierten Domains. Ein unbekannter Hostname endet mit
|
||||
404 — über einen gefälschten Header lässt sich also keine fremde Domain
|
||||
ansprechen.
|
||||
|
||||
Zwei Dinge, die daraus folgen:
|
||||
|
||||
- Der **Slug ist je Domain eindeutig**, nicht global. Derselbe sprechende
|
||||
Slug darf auf zwei Domains liegen und zeigt dort auf verschiedene Ziele.
|
||||
- Eine Domain kann **mehreren Gruppen** dienen. Das heißt aber nicht, dass
|
||||
diese die Codes der jeweils anderen sehen — die Übersicht bleibt strikt
|
||||
nach Gruppe gefiltert.
|
||||
|
||||
`BASE_URL` bleibt dabei wichtig: sie liefert die Standard-Domain für Aufrufe
|
||||
über eine nicht registrierte Adresse (etwa direkt über die IP im LAN) und
|
||||
bestimmt, ob Kurz-URLs mit `http` oder `https` gebildet werden.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user