Ihr Kontaktformular ist ein Einfallstor: so sichern Sie es ab
Kontakt- und Bestellformulare nehmen Text von jedem an, auch von Bots. Spam, eingeschleuster Code, Datei-Uploads, Captcha und Honeypots, und wer lesen kann, was Menschen schicken.
Ein Formular ist die einzige Stelle Ihrer Website, an der jeder eintippen kann, was er will, und die Website muss es annehmen. Meist ist es ein Kunde, der nach einem Preis oder einem Termin fragt. Manchmal ist es ein Bot, der den ganzen Tag ein Formular nach dem anderen ausfüllt. Und manchmal ist es ein Mensch, der testet, was das Formular klaglos schluckt.
Deshalb gehören Kontakt-, Bestell- und Terminformulare zu den ersten Dingen, die sich ein Angreifer ansieht. Im Folgenden die Risiken, woran Sie sie erkennen und was Sie den Betreuer Ihrer Website fragen sollten.
Eine Spamflut ist mehr als ein volles Postfach
Das häufigste Problem ist zugleich das harmloseste, zumindest auf den ersten Blick. Bots schicken über Ihr Formular Hunderte Nachrichten voller Werbung und Links. Das Postfach läuft voll, und eine echte Kundenanfrage geht irgendwo dazwischen unter.
Schlimmer wird es, wenn das Formular eine Bestätigung oder eine Kopie der Nachricht an die eingegebene Adresse schickt. Der Bot trägt dann fremde Adressen ein, und Ihr Server schickt diesen Menschen E-Mails von Ihrer Domain. Das schadet dem Ruf Ihrer Domain schnell: Mailanbieter behandeln sie als Spamquelle, und Ihre echten E-Mails, Rechnungen eingeschlossen, landen bei Ihren Kunden im Spamordner. Ihr Hoster kann außerdem den Versand für das ganze Konto sperren.
Wenn Ihr Formular eine Option „Kopie an mich senden“ hat, fragen Sie sich, ob Sie sie wirklich brauchen.
Drei Angriffe, je ein Satz
Die Namen klingen bedrohlich, das Prinzip ist einfach. Jeder dieser Angriffe funktioniert, weil das Formular allem vertraut, was jemand eingetippt hat.
E-Mail-Header-Injection: Jemand tippt Zeilenumbrüche und zusätzliche Adressen in das E-Mail- oder Betrefffeld, und ein schlecht programmiertes Formular verschickt dann von Ihrem Server Nachrichten an beliebige Adressen.
SQL-Injection: Jemand tippt ein Stück eines Datenbankbefehls in ein Feld, und ein Formular, das den Text direkt an die Datenbank weitergibt, führt ihn aus, wodurch dort gespeicherte Daten offengelegt oder verändert werden können.
Cross-Site-Scripting (XSS): Jemand tippt statt seines Namens ein Stück Skript ein, und wenn Sie diese Einsendung im Admin-Bereich öffnen, läuft das Skript in Ihrem Browser mit Ihren Administratorrechten.
Vor allen dreien schützt Sie Ihr Entwickler: Eingaben werden geprüft und gefiltert, bevor sie in eine E-Mail oder die Datenbank gelangen, und im Admin-Bereich so angezeigt, dass sie nicht ausgeführt werden können. Verbreitete, aktuelle Plugins tun das von Haus aus. Das größere Risiko ist ein selbst geschriebenes Formular von vor einigen Jahren, das sich seitdem niemand angesehen hat. Fragen Sie also direkt, ob Ihr Formular aus einem Plugin stammt oder von Grund auf programmiert wurde, und falls Letzteres, wer es zuletzt geprüft hat und wann.
Dateien von Kunden
Viele Formulare erlauben einen Dateianhang: einen Lebenslauf, ein Foto eines Schadens, ein eingescanntes Dokument, eine Zeichnung für ein Angebot. Das ist praktisch und zugleich der riskanteste Teil eines Formulars.
Die größte Gefahr ist eine Datei, die sich als Bild ausgibt, in Wahrheit aber ein Programm ist, etwa eine namens invoice.jpg.php. Nimmt der Server sie an und führt sie aus, übernimmt der Angreifer die Kontrolle über die Website. Lassen Sie sich von Ihrem Entwickler deshalb bestätigen, dass:
- das Formular nur bestimmte Dateitypen annimmt, etwa PDF, JPG und PNG, und den Inhalt der Datei prüft, nicht nur die Endung des Namens,
- es eine Größenbegrenzung für Dateien gibt,
- hochgeladene Dateien in einem Ordner landen, in dem der Server nichts ausführt, idealerweise außerhalb des öffentlichen Teils der Website,
- gespeicherte Dateien neue, zufällige Namen bekommen.
Bei Ihnen bleibt die Sorgfalt beim Öffnen. Ein Word-Dokument, das gleich nach dem Öffnen verlangt, Makros zu aktivieren, ist ein klassischer Weg, einen Computer zu infizieren. Denken Sie auch daran, dass Lebensläufe und Fotos, die an eine Praxis geschickt werden, personenbezogene Daten sind, manchmal besonders sensible. Bewahren Sie sie nicht länger auf als nötig.
Captcha, Honeypot und Ratenbegrenzung
Gegen Bots gibt es drei Mittel, und sie wirken am besten zusammen.
Ein Honeypot ist ein zusätzliches Feld im Formular, das Menschen nicht sehen. Bots füllen jedes Feld aus. Steht in diesem also etwas, verwirft das Formular die Nachricht stillschweigend. Kunden merken nichts, und die einfachsten Bots sind weg.
Ein Captcha unterscheidet Menschen von Bots. Neuere Varianten wie Google reCAPTCHA v3, Cloudflare Turnstile oder hCaptcha arbeiten meist im Hintergrund, ohne Buchstaben abtippen oder Ampeln anklicken zu müssen. Bedenken Sie, dass sie Informationen über Ihre Besucher an ein anderes Unternehmen weitergeben. Ihre Datenschutzerklärung sollte sie deshalb nennen.
Eine Ratenbegrenzung legt fest, wie viele Nachrichten von einer Adresse in kurzer Zeit gesendet werden können. Echte Kunden bemerken sie sehr wahrscheinlich nicht, Spamfluten und automatisiertes Testen des Formulars hält sie aber auf. Eingerichtet wird sie auf dem Server oder in einem Firewall-Dienst wie Cloudflare.
Honeypot plus Ratenbegrenzung genügt für den Anfang meistens. Kommt weiterhin Spam durch, ergänzen Sie ein Captcha.
Wo Einsendungen landen und wer sie lesen kann
Eine Nachricht aus Ihrem Formular kann an zwei Orten landen: in einem E-Mail-Postfach und in der Datenbank der Website. Manche Plugins schicken nur eine E-Mail. Andere speichern zusätzlich jede Einsendung im Admin-Bereich, meist unter einem Menüpunkt wie „Einträge“ oder „Einsendungen“. Melden Sie sich an und sehen Sie nach, was bei Ihnen zutrifft.
Beantworten Sie dann für sich ein paar Fragen:
- Wer hat Zugriff auf das Postfach, in dem die Nachrichten ankommen? Hat jemand es vor seinem Weggang an ein privates Gmail-Konto weitergeleitet?
- Wer hat ein Administratorkonto im Admin-Bereich? Jede dieser Personen kann jede gespeicherte Einsendung lesen.
- Wie lange werden Einsendungen aufbewahrt? Manche Plugins können ältere Einträge automatisch löschen.
- Läuft die Seite mit dem Formular über HTTPS, mit dem Schloss in der Adresszeile?
Jede Einsendung mit Name, E-Mail-Adresse und Telefonnummer sind personenbezogene Daten, für die Sie verantwortlich sind. Was das nach der DSGVO bedeutet, steht im Artikel über DSGVO und Website-Sicherheit.
Ein aktuelles Plugin, und eins statt drei
Formular-Plugins gehören zu den am häufigsten installierten Plugins überhaupt, deshalb schauen Angreifer genau hin. Sicherheitslücken werden darin regelmäßig gefunden und geschlossen. Ein Update für Ihr Formular-Plugin sollte darum nicht wochenlang in der Warteschlange liegen.
Prüfen Sie bei der Gelegenheit, wie viele Formular-Plugins installiert sind. Manchmal sind es drei: eins aus der ersten Version der Website, eins vom Relaunch und eins, das tatsächlich genutzt wird. Löschen Sie die ungenutzten, statt sie nur zu deaktivieren, denn ihre Dateien liegen sonst weiter auf dem Server.
Und eine Gewohnheit, die nichts kostet: Schicken Sie einmal im Monat eine Testnachricht über Ihr eigenes Formular. Formulare können ohne jede Warnung aufhören zu funktionieren. Der Kunde denkt dann, Sie ignorieren ihn, und Sie wissen nicht einmal, dass er geschrieben hat.