Zum Inhalt springen

Betrieb

Ziel-Prüfung, Vorschauseite und Aufsicht

Hier entscheidet sich, wie dieser Dienst sich verhält. Der Hintergrund ist einfach: Ein Kurz-Link verbirgt sein Ziel. Genau das ist sein Zweck und genau das macht ihn missbrauchbar — ein Link auf deiner Domain, der auf eine Phishing-Seite führt, trägt deinen guten Namen.

Shortlink beantwortet das nicht mit einer Sperre, sondern mit Sichtbarkeit: Wer nicht direkt weitergeleitet werden darf, bekommt eine Vorschauseite mit dem Ziel und dem Grund. Der Betreiber entscheidet, wo die Grenze liegt.

Vorschauseite immer zeigen. Ab Werk aus. Der grobe Schalter dieses Bereichs: Ist er an, wird vor jeder Weiterleitung das Ziel genannt — ausnahmslos. Er steht deshalb ganz oben: Wer ihn setzt, braucht alles Weitere auf der Seite nicht mehr.

Es ist die einzige Einstellung dieses Bereichs mit einer belastbaren Zusage. Alle anderen hängen an der Domain-Liste und an der Ziel-Prüfung, und beide können danebenliegen: eine versehentlich freigegebene Domain, ein Ziel, das erst nach der letzten Prüfung umgebaut wurde.

Was er kostet, offen gesagt: Der Kurzlink verliert seinen Hauptnutzen. Aus einem Klick werden zwei, und beim Regelfall dieser Anwendung — ein Ziel auf der Domain des Kunden — steht dann eine Zwischenseite vor etwas, das niemanden gefährdet. Eine Vorschauseite, die immer kommt, wird gewohnheitsmäßig weggeklickt und schützt dann niemanden mehr.

Die Begründung auf der Vorschauseite bleibt die genauere: Leitet ein Ziel selbst weiter oder liegt es auf einer fremden Domain, steht weiterhin das dort. Der Haken am einzelnen Link („Ziel immer vorher anzeigen") wird wirkungslos — er kann nichts mehr hinzufügen —, und die Anlegen-Maske weist ihn dann als wirkungslos aus.

Vertrauenswürdige Ziel-Domains. Eine Domain je Zeile. Ziele auf diesen Domains werden direkt weitergeleitet, alle anderen bekommen eine Vorschauseite. Solange nichts gespeichert wurde, steht hier die Domain aus APP_URL.

Verglichen wird die registrierbare Domain, nicht der vollständige Host. Ein Eintrag kunde.de deckt damit auch www.kunde.de und shop.kunde.de ab. Das ist gewollt — sonst bekäme der Regelfall (go.kunde.de → kunde.de/…) eine Vorschauseite. Die Kehrseite: Einer einzelnen Subdomain zu vertrauen und dem Rest nicht, ist damit nicht möglich.

Eingaben werden auf die registrierbare Domain gekürzt (https://www.kunde.de/pfad → kunde.de). Ein Domain-Suffix wie co.uk oder github.io fällt heraus und wird gemeldet: Ihn einzutragen würde jeder Domain darunter vertrauen.

Ein leeres Feld ist gültig und bedeutet: keine Domain gilt als vertrauenswürdig — dann erscheint bei jedem Link eine Vorschauseite.

Ziele, die sich nicht prüfen ließen. Ein Schalter, ab Werk aus. „Nicht prüfbar" heißt meist Zeitüberschreitung, TLS-Fehler oder ein Server, der HEAD-Anfragen ablehnt — in der Regel also keine Gefahr. Eingeschaltet erscheint die Vorschauseite auch für die eigenen Ziele des Kunden, sobald dessen Server einmal langsam war; eine Vorschauseite, die man gewohnt wegklickt, schützt niemanden mehr.

Fremde Ziel-Domains („Nur Ziele auf freigegebenen Domains zulassen"). Ab Werk aus. Dieser Schalter wirkt an einer anderen Stelle als die übrigen: Er entscheidet nicht, wie weitergeleitet wird, sondern ob ein Link überhaupt entstehen darf. Eingeschaltet lehnt die Anlegen-Maske jedes Ziel außerhalb der Liste ab.

Eine Installation, die ausschließlich Kunden-Adressen kürzt, macht sich damit als Missbrauchswerkzeug unbrauchbar. Der Preis: Niemand kann mehr auf eine fremde Seite verlinken — auch nicht harmlos. Bestehende Links bleiben unangetastet.

Automatisch stilllegen. Ab Werk aus, und das mit Grund: Ein Befund ist keine Gewissheit. Eine Wartungsseite, ein Login-Rücksprung oder eine Tracking-Weiche sieht für die Prüfung genauso aus wie eine Umleitung mit Absicht. Eingeschaltet wird der Kampagnenlink eines Kunden mitten in der Aktion abgeschaltet.

Damit dieser Tausch — Verfügbarkeit gegen Sicherheit — nicht heimlich passiert, geht bei jedem automatischen Stilllegen eine Nachricht an den Eigentümer des Links, mit Ziel, tatsächlicher Endadresse und dem Hinweis, dass der Betreiber ihn wieder freigeben kann.

Frist der Ziel-Prüfung. Nach wie vielen Tagen ein Ziel erneut geprüft wird, Vorgabe 7. 0 bedeutet: nach der ersten Prüfung nicht mehr wiederholen — eine gültige Wahl für abgeschottete Installationen, aber eine bewusste: Ein Ziel, das erst nach dem Anlegen zur Weiterleitung umgebaut wird, fällt dann nicht mehr auf.

Was die Prüfung tut

shortlink:check-targets folgt der Weiterleitungskette des eingetragenen Ziels selbst, über höchstens fünf Sprünge, mit fünf Sekunden Zeitgrenze je Anfrage. Drei Ergebnisse:

Ergebnis Bedeutung
ok Der Weg endet auf derselben registrierbaren Domain
foreign_redirect Das Ziel leitet selbst auf eine andere Domain weiter — immer Vorschauseite, auch bei vertrauenswürdiger Domain
unknown Nicht erreichbar. Kein Befund — ein Timeout ist keine Aussage

Geprüft wird ausschließlich von diesem Lauf. Nicht beim Anlegen: Das würde den Knopf bis zu fünf Sekunden an einem fremden Server hängen lassen, im Kettenfall länger. Ein neuer Link ist deshalb zunächst „noch nicht geprüft", und bis zum ersten Prüflauf entscheidet allein die Domain-Liste, ob eine Vorschauseite erscheint. Ohne den Cron-Eintrag wird nie geprüft.

Der Befund foreign_redirect ist der Weg, auf dem sich die Domain-Liste sonst umgehen ließe: Ein Ziel auf der eigenen Domain, das selbst weiterschickt, wäre ohne diese Prüfung der unauffälligste aller Fälle.

Public Suffix List

Die Frage „gehören zwei Hosts zur selben Domain" lässt sich nicht durch Abschneiden von Labels beantworten. Aus go.kunde.de das erste Label zu streichen ergibt richtig kunde.de — aus kunde.co.uk aber co.uk, und damit wäre jede Domain unter .co.uk vertrauenswürdig.

Deshalb liegt eine Kopie der Public Suffix List im Paket (resources/public-suffix-list.dat, MPL 2.0). Aktualisieren:

php artisan shortlink:suffix-list

Der Befehl schreibt nach storage/app/private/public-suffix-list.dat; diese Fassung hat Vorrang vor der mitgelieferten. Das Verzeichnis ist vom Deployment ausgenommen, eine Aktualisierung der Anwendung überschreibt sie also nicht.

Dies ist die einzige Stelle, an der diese Anwendung von sich aus nach draußen greift — und auch nur, wenn der Befehl aufgerufen wird. Für abgeschottete Installationen lässt sich die Quelle auf einen internen Spiegel umstellen (SHORTLINK_SUFFIX_LIST_SOURCE).

Fehlt die Liste, bekommt jedes Ziel eine Vorschauseite — die sichere Richtung. Die Einstellungsseite sagt das oben, sonst sucht man den Fehler bei den Links. Ist zusätzlich „Nur Ziele auf freigegebenen Domains zulassen" eingeschaltet, könnte gar kein Link mehr angelegt werden; die Maske lehnt ab und nennt diesen Grund.

Eine veraltete Liste ist kein Ausfall: Folge sind neue TLDs, die als unbekannt gelten, also eine Vorschauseite, die zu Unrecht erscheint oder zu Unrecht ausbleibt.

Der Ort, an dem du auf einen Befund reagieren kannst. Er zeigt alle Shortlinks dieser Installation — Befunde zuerst —, mit dem Konto, dem der Link gehört. Drei Sichten: alle, mit Befund, stillgelegt, jeweils mit Zähler.

Genau zwei Aktionen: stilllegen und wieder freigeben. Bearbeiten und Löschen bleiben beim Eigentümer. Du greifst ein, um Missbrauch zu stoppen, nicht um fremde Links zu pflegen.

Ein stillgelegter Link leitet nicht mehr weiter; Besucher sehen die neutrale Hinweisseite ohne Begründung. Der Eigentümer wird beim manuellen Stilllegen nicht benachrichtigt — anders als beim automatischen, wo eine Nachricht Pflicht ist. Jeder Eingriff wird protokolliert.

Das Freigeben setzt das Prüfergebnis nicht zurück. Ein Befund bleibt sichtbar, auch wenn du entschieden hast, dass er in Ordnung ist — sonst verschwände die Information, auf deren Grundlage du entschieden hast.

Quelle dieser Seite: docs/betrieb/ziel-pruefung.md im Repository. Sie wird beim Bauen daraus erzeugt — Änderungen gehören in die Markdown-Datei, nicht in diese Seite.