Eine reine DNS-Pruefung sagt nichts darueber aus, ob der Webserver die
Domain auch dem richtigen Verzeichnis zuordnet - genau das ist der
haeufigste Fehler. Die Pruefung ruft die Domain deshalb von aussen auf
einen signierten Endpunkt auf. Kommt der Aufruf mit gueltigem Token an,
ist die ganze Kette bewiesen, denn nur diese Installation kann ein
solches Token erzeugen.
Erkannt und benannt werden: fehlender DNS-Eintrag, Domain-Weiterleitung
des Registrars, falsches Verzeichnis, ungueltiges Zertifikat.
Link-lokale Adressen werden nicht abgerufen - dort liegen bei Cloud-
Anbietern die Metadaten-Dienste.
short.example.de/messe und qr.example.de/messe koennen auf
unterschiedliche Ziele zeigen. Die Domain ergibt sich aus dem
Host-Header; Slugs sind nur noch innerhalb ihrer Domain eindeutig.
Bestandslinks tragen nach der Migration den Platzhalter 0 und werden
beim ersten Zugriff der aus APP_BASE_URL erzeugten Standarddomain
zugeordnet. Ein Sentinel statt NULL, weil SQLite NULL-Werte in einem
UNIQUE-Index als jeweils verschieden behandelt - die Eindeutigkeit
waere sonst nicht durchgesetzt.
Unbekannte Hosts landen auf der Standarddomain, damit bestehende Links
auch beim Aufruf ueber die IP oder hinter einem Proxy funktionieren.
Erzeugt PNG und SVG ueber endroid/qr-code. Die eingestellte Groesse gilt
fuer das fertige Bild inklusive Quiet Zone; der Rand wird in Modulen
angegeben und ueber die Matrix in Pixel umgerechnet.
Kontrastwarnung nach WCAG, zusaetzlich Hinweis auf invertierte Codes -
die erkennen viele Scanner nicht. Mit Logo wird die Fehlerkorrektur
zwingend auf Level H gesetzt.
Uploads werden gegen GD geprueft (getimagesize allein akzeptiert auch
beschaedigte Dateien), in der Groesse und den Abmessungen begrenzt und
ausserhalb des Webroots abgelegt. SVGs werden vor dem Speichern von
Skripten, Event-Handlern, Entities und externen Referenzen befreit.
Slugs aus 34 Zeichen (0 und 1 fehlen wegen Verwechslung mit o und l),
kollisionssicher mit wachsender Laenge. Wunsch-Slugs werden normalisiert
und gegen eine Liste reservierter Pfade geprueft.
Die URL-Validierung kommt bewusst ohne FILTER_VALIDATE_URL aus: dieses
verwirft jedes Nicht-ASCII-Zeichen und lehnt damit Umlaut-Domains und
Umlaute im Pfad ab. Erlaubt sind nur http und https, darin aber auch
IDN, IPv6 und interne Hostnamen ohne Punkt. Gespeichert wird die
lesbare Schreibweise; Punycode entsteht erst im Location-Header, weil
HTTP-Header laut RFC 7230 ASCII sein muessen.
Die Statistik speichert keine IP-Adressen (optional nur einen taeglich
rotierenden Hash) und laeuft nach dem Ausliefern der Weiterleitung.