Zum Inhalt springen

Erlaubte Links & Inhaltssperre

Ihr öffentlicher Schlüssel steht im Code Ihrer Website – jeder kann ihn kopieren und die API direkt aufrufen. Bei einem Kontaktformular ist das kein Problem: Die E-Mail geht immer an Sie. Anders ist es, wenn eine Vorlage ihren Empfänger aus Parametern übernimmt (eine Newsletter-Bestätigung, eine automatische Antwort, eine Bestellbestätigung): Wer den öffentlichen Schlüssel hat, könnte Ihre Vorlage dann – von Ihrer Domain, mit Ihrem Branding – an jede beliebige Adresse senden und Text und Links selbst befüllen. Genau so funktioniert Phishing.

Die Regel von Frontmail lautet daher: dynamischer Empfänger ⇒ gesperrter Inhalt. Sie können weiterhin an einen im Browser gewählten Empfänger senden, aber der Aufrufer kann Ihre Vorlage nicht in eine Phishing-E-Mail verwandeln.

Anfrage Gesperrt
öffentlicher Schlüssel + Vorlage, deren To/CC/BCC Parameter verwenden (Dynamischen Empfänger erlauben an) ja
automatische Antwort (geht immer an die Adresse aus dem Formular) ja – Links und Absenderfelder
privater Schlüssel (Ihr Server) nein, außer die Vorlage hat Nur Links auf erlaubte Domains zulassen
öffentlicher Schlüssel + Vorlage mit festem Empfänger (Kontaktformular) nein – es gilt nur die Regel für den Absender

Eine Vorlage mit eingeschaltetem Dynamischen Empfänger erlauben, aber festen Adressen in To/CC/BCC ist nicht gesperrt.

  1. CAPTCHA ist Pflicht. Die Vorlage muss CAPTCHA verlangen eingeschaltet haben, sonst schlägt die Anfrage mit 403 dynamic_recipient_requires_captcha fehl. Das CAPTCHA verwendet Ihre eigenen Turnstile-Schlüssel. Können Sie kein CAPTCHA verwenden, senden Sie die Vorlage von Ihrem Server mit einem privaten Schlüssel.
  2. Fester Absender. Absenderadresse, Absendername und Reply-To dürfen keine Parameter verwenden – 403 dynamic_field_not_allowed.
  3. Kein Markup vom Aufrufer, kurze Texte. Parameter vom Typ HTML können nicht befüllt werden, und jeder Textwert hat höchstens 500 Zeichen (URL-Parameter 2.048; eine kleinere Max. Länge am Parameter gilt weiterhin) – 422 invalid_template_params mit details.reason: "content_locked".
  4. Links nur auf erlaubte Domains – siehe unten – 403 link_not_allowed.
  5. Limit pro Empfänger. Höchstens 5 E-Mails pro Empfängeradresse und Tag (UTC), einstellbar unter Sicherheit → E-Mails pro Empfänger und Tag (1–1.000). Über dem Limit: 429 rate_limited mit details.scope: "recipient". Automatische Antworten teilen sich den Zähler – über dem Limit wird keine automatische Antwort erstellt.

Jede Prüfung läuft, bevor ein Credit verbraucht wird. Bei automatischen Antworten markiert eine fehlgeschlagene Prüfung die automatische Antwort als failed (mit dem Fehlercode im Verlauf), der Credit wird erstattet und nichts wird gesendet.

Ein Link ist erlaubt, wenn seine Domain

  • direkt in der Vorlage steht (HTML, Textversion oder Betreff) – und nicht von einem Platzhalter erzeugt wird. https://acme.com/reset?token={{token}} erlaubt acme.com; {{reset_url}} oder https://{{sub}}.acme.com erlauben nichts;
  • auf Ihrer Liste der erlaubten Domains steht (Sicherheit → Erlaubte Websites);
  • unter Sicherheit → Erlaubte Link-Domains eingetragen ist – eine pro Zeile, example.com (genau dieser Host) oder *.example.com (Subdomains, nicht die Hauptdomain) – nach denselben Regeln wie bei den erlaubten Domains;
  • die eigene Domain von Frontmail ist (die Fußzeile Gesendet mit Frontmail im Free-Tarif).

mailto:, tel: und alle anderen Nicht-Web-Links (javascript:, data:, …) sind nur erlaubt, wenn genau derselbe Link in der Vorlage steht.

Nach dem Rendern sammelt Frontmail jede URL, die ein Mailprogramm öffnen oder in einen Link verwandeln könnte:

  • href, src, srcset, action, formaction, background, poster und andere URL-Attribute, auch innerhalb bedingter Kommentare für Outlook;
  • CSS url() und @import in style-Attributen und in <style> sowie <meta http-equiv="refresh">;
  • URLs und bloße Domains im HTML-Text, in der Textversion und im Betreff – Mailprogramme verlinken evil.com/login oder www.evil.com automatisch, daher zählen auch sie als Links.

Vor dem Vergleich werden URLs so normalisiert, wie ein Browser sie lesen würde: HTML-Entities und CSS-Escapes werden dekodiert, unsichtbare Zeichen entfernt, \ wird als / behandelt, protokollrelative //host werden aufgelöst, Benutzerangaben verworfen (https://acme.com@evil.com ist evil.com), Prozentkodierung dekodiert, Großbuchstaben und abschließende Punkte entfernt, und internationalisierte Domains werden in Punycode verglichen – ein Doppelgänger wie аcme.com mit kyrillischem а passt nicht auf acme.com (der Fehler kennzeichnet ihn mit idn: true).

Der Fehler listet in details.hosts nur die beanstandeten Domains auf – niemals vollständige URLs, die Tokens enthalten könnten.

  • Bloße Domains werden anhand einer Liste bekannter Endungen erkannt, die keine Domains sind (report.pdf, index.html und Node.js sind keine Links); ein Text wie Mr.Smith kann daher als Domain mr.smith zählen. Bei Phishing beliebte Endungen, die zugleich echte Domains sind (.zip, .mov), zählen immer.
  • Einfache E-Mail-Adressen im Text (jane@example.com) werden nicht als Links behandelt.
  • Die Prüfung betrifft, wohin Links führen, nicht den Text um sie herum. Halten Sie Texte kurz und Ihr Empfängerlimit für öffentliche Formulare niedrig.

Schalten Sie in den Vorlageneinstellungen (Einstellungen → Schutz) Nur Links auf erlaubte Domains zulassen ein, um die Linkprüfung auf jede Anfrage anzuwenden, auch auf Sendungen mit privatem Schlüssel. Bei Galerievorlagen mit dynamischem Empfänger ist die Option standardmäßig eingeschaltet.

Bei jeder Anfrage mit öffentlichem Schlüssel darf die Absenderadresse der Vorlage nicht aus Parametern stammen (sonst 403 dynamic_field_not_allowed). Ein Kontaktformular, das die Adresse des Besuchers in Reply-To einsetzt, funktioniert weiterhin – genau dort gehört sie hin. Der Vorlageneditor warnt unter Prüfungen vor all dem.