Betrieb klebt einen Einmal-Link in einen Slack-Kanal. Die Karte klappt auf, oben steht der Seitenname. Zehn Minuten später öffnet die Empfängerin und sieht «Dieses Geheimnis ist verbrannt». Beide Seiten sind sicher, den Klartext nie gelesen zu haben. Was den Server zuerst erreicht, ist oft nicht der Finger der Kollegin, sondern der GET, den Slack für die Link-Vorschau schickt — in der deutschen Hilfe heißt das Link-Vorschauen.

Der vorige Text hat erklärt, warum der Schlüssel eines Einmal-Links hinter # gehört: Dort geht es um «sieht der Host mit dem Geheimtext den Schlüssel». Hier ist die Frage enger: Kann die Vorschau den einen Lesevorgang verbrauchen, bevor jemand klickt. Der Schlüssel bleibt hinter #. Erstellen und Lesen ohne Konto. Der Einmal-Link von MyPassGen öffnet sofort; Abrufe starten bei 1 und enden bei höchstens 10. Dieser Text ist keine Tour durch die Schaltflächen. Er folgt dem, was du in Network, Adresszeile und Chatfenster selbst siehst.

Zwei Dinge auseinanderhalten

Ob die Vorschau den Geheimtext verbrennt, ist nicht dieselbe Frage wie: Bleibt die volle Adresse im Verlauf. Eine Vorschau, die nur HTML holt und kein Seitenscript ausführt, bekommt den Schlüssel hinter # in der Regel nicht und erreicht die Abruf-Schnittstelle nicht. Im Kanal steht trotzdem die ganze Zeichenkette s.html?id=…#…. Wer sie kopiert, kann öffnen. Eine Vorschau, die nicht verbrannt hat, heißt nicht, der Link sei kein Beleg mehr.

Die Gegenseite sagt verbrannt, du hast nicht geklickt

Ein häufiger Einmal-Entwurf lautet: Der erste Abruf holt den Geheimtext, danach löscht der Server ihn. Steht die Zahl der Abrufe auf 1, ist diese eine Antwort die letzte Kopie. Zwischen «erfolgreich erstellt» beim Sender und «verbrannt» bei der Empfängerin können viele Besuche landen, die kein Mensch geklickt hat: Kanal-Vorschau, Mail-Sicherheitsscan, ein Firmen-Gateway, das die URL umschreibt und danach prüft.

Slack schreibt das in die Produktdoku. Unfurling links in messages sagt: Steht ein Link in einer Nachricht, holt Slack die Seite und hängt eine Vorschau an. Die offizielle Robots-Seite nennt den Bot, der das holt, Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots), und schreibt: Er nimmt so wenig von der Seite wie möglich (HTTP Range), um oEmbed-, Twitter-Card- und Open-Graph-Tags zu ziehen. Zeigen die Tags auf Bild, Video oder Audio, holt er diese Datei extra zur Prüfung. Slack Robots schreibt außerdem: Antworten zur selben URL werden im Dienst etwa 30 Minuten zwischengespeichert; Slack hält sich für diesen Abruf nicht an robots.txt, weil er im Auftrag der Person handelt, die den Link schon gepostet hat — nicht als Seitencrawler.

Eine Karte im Kanal beweist also nur: Eine Maschine, die nicht die Empfängerin ist, hat mindestens einen HTTP-Request an die geklebte Adresse geschickt. Sie beweist nicht, dass Klartext gelesen wurde. Sie beweist nicht, dass der Geheimtext als Lesevorgang gezählt wurde. Ob er verbrannt ist, siehst du erst, wenn du weißt, welche Schicht dieser Request getroffen hat.

Welches Stück der URL die Vorschau wirklich schickt

Der volle Link, den du kopierst, sieht so aus: …/s.html?id={id}#{key}. Die id hinter dem Fragezeichen wandert in die HTTP-Request-Zeile. Der Schlüssel hinter der Raute bleibt nach Protokoll beim Client. Siehe RFC 3986 §3.5 und RFC 9110 §7.1: Die Ziel-URI schließt das Fragment aus, weil dieses Stück der Client verarbeitet. Ein Vorschau-Bot schickt einen normalen HTTP-GET. Eine legale Request-Zeile lautet GET /de/s.html?id=…. Der Schlüssel hinter der Raute erreicht die Maschine mit dem Geheimtext nicht.

Deshalb kann eine Vorschau, die nur HTML holt, den Klartext in der Regel nicht entschlüsseln. Die Leseseite muss zuerst per Script location.hash lesen, dann den Geheimtext vom Server holen und ihn auf diesem Gerät mit AES-256-GCM öffnen. Dem Vorschau-Crawler fehlt der Fragment-Schlüssel — er hat nur die Nummer. Selbst wenn er das ganze HTML von s.html speichert, steht darin kein Passwort. Die Leseseite ist eine noindex-Landung. Im ersten HTML sitzt ein allgemeiner Titel. Klartext erscheint erst, wenn das Script fertig ist.

Was der Chat speichert, ist ein anderes Objekt. Eingefügt wurde die ganze Zeichenkette, inklusive Raute und Schlüssel. Kanalsuche, Nachrichtensync und dasselbe Gespräch auf dem neuen Telefon liefern weiter den vollen Beleg. Der Schlüssel hinter # hält ihn aus dem Vorschau-GET und aus typischen Server-Logs. Er hält die volle URL nicht aus dem Gruppenverlauf. Für eine empfindlichere Übergabe kannst du Nummer und Schlüssel auf zwei Kanäle legen — dazu später.

Drei Abrufe, nur einer zählt

RFC 9110 definiert GET als sichere Methode: Das Absenden soll keine zerstörerische Nebenwirkung haben. Eine Seite nur für eine Karte zu holen, dürfte den Geheimtext nach dieser Semantik nicht löschen. In der Praxis verbrennt ein Einmal-Werkzeug, das «erster GET auf das Dokument» schon als Lesen zählt, den Inhalt, bevor die Empfängerin kommt. Der Unterschied liegt nicht im Namen der Chat-App. Er liegt darin, an welchen Request der Zähler gebunden ist.

Sortiere Abrufe nach dem, was sie ausführen können. Die erste Sorte nimmt das erste HTML, liest <title> und Open Graph und startet kein Seitenscript. Slacks offizielle Beschreibung von Link Expanding gehört hierher: Metadaten ziehen, danach Dateien holen, die diese Tags nennen. Apple schreibt in Ensuring Beautiful Rich Links, dass die Erzeugung von Rich Links kein JavaScript ausführt; Open Graph muss deshalb im Seitenquelltext stehen. Einbettungen in Discord-Kanälen entstehen oft genauso: Discordbot/2.0 liest das erste HTML, statt eine volle Browser-Engine zu starten.

Die zweite Sorte führt Seitenscript aus, aber im Request fehlt weiter das Fragment. Headless Browser und manche Unternehmens-Sandboxes sitzen hier. Sie können das JavaScript der Leseseite laufen lassen und trotzdem location.hash nicht lesen. Auf dieser Site heißt «kein Schlüssel» auch «kein Geheimtext-Abruf». Die Seite bleibt bei «Link unvollständig». Der Zähler darf sich nicht bewegen.

Die dritte Sorte führt Script aus und lädt die volle URL — inklusive Raute — in eine echte Seitenumgebung. Einzelne Schutzprodukte, die «den Link, den du gleich anklickst» in einem lokalen WebView öffnen, oder eine Vorschau, die die Seite auf dem Gerät der sendenden Person vollständig lädt, können «Geheimtext holen und zählen» erreichen. Das Protokoll schließt diese Klasse nicht aus. Du kannst sie nur mit einem Testlink auf demselben Kanal nachstellen.

Wo Slack, WeChat und Mail-Gateways sich unterscheiden

Slack ist der einfachste Pfad zum Nachprüfen. Die Robots-Seite veröffentlicht einen User-Agent. Mit derselben Zeichenkette holst du die Leseseite und siehst, ob die Antwort statisches HTML ist und ob der Zähler sich danach bewegt hat. Slack dokumentiert außerdem den globalen Cache von etwa 30 Minuten: Dieselbe URL, kurz hintereinander in mehrere Kanäle geklebt, trifft den Ursprung nicht jedes Mal neu. Ein Seitentitel auf der Karte heißt nur: Metadaten oder <title> wurden gelesen. Der deutsche Standardtitel der Leseseite ist «Einmal-Link · MyPassGen». Darin steht dein Testsatz nicht.

WeChat veröffentlicht keine Robots-Seite wie Slack. Die Fähigkeiten eines internen Crawlers darfst du deshalb nicht als Vertrag lesen. Was du sofort siehst: Erscheint nach dem Einfügen eine Titelkarte; zeigt die Leseseite nach dem Klick der Empfängerin Klartext, «Link unvollständig» oder «verbrannt». Karten in solchen Messengern entstehen weiter oft, indem ein Server HTML-Titel und Kurztext holt — nicht indem das Script der Leseseite zuerst auf dem Telefon der Empfängerin durchläuft. Ohne öffentliche Spezifikation gilt das Ergebnis deines Testlinks. «Eine Karte ist da» ist nicht «der Geheimtext wurde geholt».

Im DACH-Alltag trifft dich oft ein dritter Weg: die Firmenmailbox. Microsoft beschreibt unter Sichere Links (Safe Links), dass eingehende Mail URLs scannt und umschreiben kann; ein Klick wird erneut geprüft. Umschriebene Adressen tragen ein Präfix wie safelinks.protection.outlook.com. Scan beim Zustellen und Sprung beim Klick können beide noch einen GET auf das Ziel schicken. Zwei Stellen prüfen: Ist der sichtbare Text schon eingepackt, und steht nach dem Klick in der Adresszeile noch das Stück hinter #. Fällt der Schlüssel beim Umschreiben oder Weiterleiten weg, muss die Leseseite «Link unvollständig» zeigen, nicht den Testsatz. Wandert die volle URL — inklusive Raute — in eine Sandbox, die Script ausführt, kann ein Abruf zählen. Nimm nicht an, jedes Gateway «schaut nur HTML». Links in Microsoft-Teams-Kanälen können denselben Weg nehmen; die Richtlinie hängt am Mandanten. Für WhatsApp gilt dasselbe Prinzip wie für WeChat: ohne öffentliche Robots-Seite entscheidet der Testlink, nicht die Karte.

Welche Requests die Leseseite hier wirklich macht

Öffnet die Leseseite von MyPassGen, macht das Script zwei Schritte nacheinander. Zuerst fragt es den Status zur Nummer: Die Antwort lautet noch da, schon verbrannt oder abgelaufen, und sie erhöht den Zähler nicht. Fehlt der Schlüssel hinter #, endet es hier; die Seite sagt «Link unvollständig». Mit Schlüssel folgt der GET auf den Geheimtext. Dieser Request erhöht read_count. Erreicht die Zahl die von dir gesetzte Grenze (Standard 1, höchstens 10), löscht der Server den Geheimtext. Das nächste Öffnen ist «verbrannt». Das Ablaufdatum folgt der TTL beim Erstellen: 1 Stunde, 24 Stunden, 7 Tage — oder nur nach Anzahl, ohne TTL.

Eine Vorschau, die nur s.html?id=… holt, und ein Scanner, der nur den Status trifft, verbrauchen diesen einen Abruf also nicht. Was zählt, ist der Geheimtext-Request von «Leseseiten-Script, das den Schlüssel schon hat». Beim Erstellen verschlüsselt der Browser auf diesem Gerät mit AES-256-GCM, 12-Byte-IV, Klartext höchstens 32 KB. Der Server hält nur Geheimtext. Der Schlüssel steht nicht in der Request-Zeile. Wie du Algorithmus und «kein Klartext-Upload» prüfst, steht in Wie du prüfst, dass Browser-Verschlüsselung keinen Klartext hochlädt.

Die Leseseite hat keinen eigenen «Aufdecken»-Knopf. Ist der Schlüssel da, holt das Öffnen des Tabs den Geheimtext. Das widerspricht nicht «Vorschau-Crawler nehmen nur HTML» — diese Crawler kommen meist nicht bis zum Abruf. Der Widerspruch sitzt in der dritten Klasse: Die volle URL landet in einer Umgebung, die Script ausführt. Dann sieht es aus wie ein Mensch, der den Tab öffnet, und ein Link mit Standard 1 ist verbraucht. Am Kartenstil erkennst du die Klasse nicht. Du erkennst sie am Status, wie im nächsten Abschnitt.

Die Vorschau hat nicht verbrannt — der Verlauf bleibt ein Beleg

Ein voller Link in einem Slack-Kanal, in WeChat oder in einem Mail-Thread ist weiter ein Beleg: ein Schritt vom Klartext entfernt. Wer die Nachricht finden kann, kann öffnen, solange nichts verbrannt ist. Ein geschlossenes privates Fenster nimmt keine volle URL mit, die schon als Lesezeichen oder im Download-Ordner liegt. Siehe Nach dem Schließen des Inkognito-Fensters bleibt das Passwort in Downloads, Lesezeichen und Zwischenablage.

Was nach der Vorschau noch übrig ist

Derselbe Testlink, Abrufe auf 1: Nach der Vorschau sehen Sender und Empfängerin nicht dieselben Dinge. Die Tabelle spricht von Seiten, die du öffnen kannst — nicht von Werbesätzen.

Was passiert ist Was das Chatfenster oft zeigt Der volle Link sollte danach zeigen
Nur HTML-Metadaten, kein Script Titelkarte, kein Testsatz Testsatz lässt sich noch entschlüsseln
Script lief, Request ohne # Karte oder leere Vorschau; Server nur Status Noch entschlüsselbar; ohne Schlüssel «unvollständig»
Volle URL in einer Umgebung mit Script Karte oder Scan-Bericht; Zähler verbraucht Verbrannt oder abgelaufen, kein Klartext
Mail-Gateway hat die URL umgeschrieben, Sprung verliert das Fragment Im Text eine Adresse wie safelinks… Link unvollständig; Geheimtext meist noch da

Die vierte Zeile nicht mit der dritten vermischen. Ist der Schlüssel weg, öffnet die Empfängerin nicht — du öffnest mit dem originalen vollen Link noch. Dann wurde nicht gezählt, die Gegenseite hat nur ein unvollständiges Stück. Ist der Schlüssel noch da und die Seite schon verbrannt, hat Vorschau oder Scan zuerst gelesen. Im ersten Fall reicht das Stück hinter der Raute nachzuschicken. Im zweiten musst du neu erstellen. Es gibt keine Klartextkopie auf dem Server und keine Support-Adresse, die Verbranntes zurückholt.

Sofort nachprüfen

Die folgenden Schritte hängen an keinem Markenversprechen. Nimm durchgehend einen Testsatz, der kein lebendes Konto öffnet, zum Beispiel orange-lake-7. Nicht mit dem Masterpasswort, nicht mit einem Produktions-Schlüssel, nicht mit einem echten Einmal-Link üben.

  1. Öffne den Einmal-Link, schreib den Testsatz, Ablauf 24 Stunden, Abrufe bei 1, erzeuge den Link. Die volle Adresse merken; die Form muss s.html?id=…#… sein. Sofort nutzbar, ohne Konto.
  2. Kopiere nur das Stück vor der Raute. Schick in einem Terminal einen Request mit Slack-User-Agent, etwa curl -A "Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)" "https://mypassgen.com/de/s.html?id=…". Die Antwort ist HTML der Leseseite. Im Titel oder Text darf der Testsatz nicht stehen. Das beweist nur «Dokument allein liefert keinen Klartext», nicht den echten Chat.
  3. Öffne dieselbe Adresse — nur id, kein Schlüssel — im Browser. Du sollst «Link unvollständig» sehen, nicht den Testsatz. In den Entwicklertools Network «Protokoll beibehalten» an: Statusabfrage ja, danach kein erfolgreicher Geheimtext-GET.
  4. Öffne sofort den vollen Link (mit #) in einem zweiten Tab. Der Testsatz muss erscheinen. Hat Schritt 3 schon verbrannt, zählt die Implementation oder ein Gerät dazwischen auch den Besuch ohne Schlüssel — hier stoppen, nichts Echtes schicken.
  5. Lege einen zweiten Testlink mit Abruf 1 an und klebe ihn vollständig in einen Slack-Kanal, den du steuerst, in WeChat «Dateiübertragung» oder eine Testgruppe. Warte auf die Karte (oder darauf, dass keine erscheint). Die Leseseite nicht öffnen.
  6. Nach der Vorschau denselben vollen Link im Desktop-Browser öffnen. Lässt er sich noch entschlüsseln, gehört die Vorschau auf diesem Kanal zu den ersten beiden Sorten. Ist er verbrannt, war ein Abruf der dritten Sorte dazwischen — oder ein Gerät von dir hat die volle Seite vorgeladen. Für den nächsten echten Inhalt neu erstellen. Danach die Zwischenablage überschreiben, wie in Wer liest die Zwischenablage, nachdem du ein Passwort kopiert hast. Keine Adresse mit # ins Lesezeichen.

Bei der Firmenmailbox noch einen halben Schritt: Schick den Testlink an dein eigenes Arbeitskonto. Sieh, ob der Text schon als Safe-Links-Adresse daherkommt, und ob nach dem Klick der Schlüssel in der Adresszeile bleibt. Schlüssel weg: Nummer per Mail, Schlüssel per Telefon. Verbrannt: Abrufe erhöhen oder den Kanal wechseln. MyPassGen sortiert kein Gateway für dich. Maßgeblich sind die Fenster, die du gerade geöffnet hast.

Wenn der Kanal trotzdem Vorschauen baut

Standard 1 passt, wenn die Gegenseite den vollen Link hat, sofort öffnet und der Inhalt danach weg sein soll. Kanal, große Gruppe, Verteiler mit Karten: zuerst den Testlink durch den vorigen Abschnitt. Erst wenn die Vorschau nicht zählt, den echten Inhalt schicken. Hat der Test schon verbrannt, macht eine höhere Zahl die Vorschau nicht «sicher»: Bei 2 bleibt ein menschlicher Öffner übrig. Führt der Scanner jedes Mal Script mit Schlüssel aus, kann er die Zahl trotzdem leeren.

Die robustere Trennung sind zwei Kanäle. Eine Nachricht nur s.html?id=… — die Vorschau bekommt höchstens Nummer und allgemeinen Titel. Die andere — Telefon, persönlich oder ein zweites Messenger-Konto — nur das Stück hinter #. Ohne beide Hälften gibt es keinen Klartext. Das ist Gebrauch, keine Standardzerlegung der Seite; die Erzeugen-Seite liefert weiter einen vollen Link, weil die Übergabe zu einer Person so einfacher ist.

Das Passwort selbst entsteht auf diesem Gerät, nicht erst im Gruppenchat zum späteren Löschen. Der Passwortgenerator von MyPassGen erlaubt im Zufallsmodus 6–128 Zeichen, Standard 16; unter 8 Zeichen kommt der Hinweis «zu schwach». Sofort nutzbar; das Ergebnis geht nicht als Geschäftsdaten raus. Ein Zertifikatspaket oder eine Exporttabelle über 32 KB gehört nicht in den Einmal-Link, sondern in die Dateiverschlüsselung: AES-256-GCM im Browser, eine Datei bis 5 GB, Ausgabe .lock / .enc, Passwort extra. Die Cloud speichert nur Geheimtext, siehe Bevor die Datei in die Cloud kommt: wer den Klartext sieht.

Hast du «lässt sich der volle Link nach der Vorschau noch öffnen» und «steht der volle Beleg im Verlauf» geprüft, kannst du die Ausgangsfrage beantworten: Eine Vorschau, die nur HTML holt, verbrennt den Einmal-Link dieser Site in der Regel nicht. Ein Abruf, der Script ausführt und # mitnimmt, tut es. Die Karte selbst gibt die Antwort nicht. Status und das zweite Öffnen tun es.

Häufige Fragen

Im Slack-Kanal liegt schon eine Vorschaukarte. Ist der Link tot?

Nicht unbedingt. Slack schreibt, Link Expanding ziehe Metadaten und hole per Range so wenig Seite wie möglich. Die Karte beweist nur: Das HTML der Leseseite wurde geholt. Öffne den vollen Link noch einmal: Lässt er sich entschlüsseln, ist der Abruf noch da. Ist er verbrannt, neu erstellen — dieselbe Adresse nicht wiederholt aktualisieren und auf Glück hoffen.

WeChat hat keine öffentliche Robots-Seite. Welchem Satz glaubst du?

Dem Ergebnis dieses Testlinks. Eine Titelkarte heißt nur: Irgendein Programm hat Titel oder Kurztext gelesen. Bevor die Empfängerin klickt, öffnest du selbst den vollen Link: Noch Klartext — auf diesem Kanal hat die Vorschau den Geheimtext nicht geholt. Schon verbrannt — auf zwei Kanäle legen oder Eins-zu-eins schicken.

Reichen 2 oder 3 Abrufe gegen die Vorschau?

Sie lassen mehr «Geheimtext holen» übrig. Sie machen aus der Vorschau keine sichere Methode. Führt der Scanner jedes Mal Script mit Schlüssel aus, ist die Zahl trotzdem leer. Zuerst mit Abruf 1 prüfen, ob die Vorschau zu den ersten beiden Sorten gehört. Musst du einen unruhigen Kanal nutzen, Abrufe erhöhen und akzeptieren, dass noch eine weitere Person öffnen kann.

Brauchen Erstellen und Lesen ein Konto? Zählt der Vorschau-Bot als lesende Person?

Kein Konto. Erstellen und Lesen sind für Besucher offen. Holt der Bot nur HTML, ist das kein Lesevorgang. Schickt er den Geheimtext-GET, kann der Server ihn nicht von einem Menschen unterscheiden — der Zähler sinkt trotzdem. Die Leseseite ist für die Empfängerin offen, ohne Anmeldesperre, und Verbranntes holt niemand zurück.