WordPress-Kontaktformulare: eine Sicherheits-Checkliste
Contact Form 7, WPForms, Gravity Forms, Ninja Forms oder Fluent Forms – entscheidend ist weniger das Plugin als seine Einrichtung und Pflege. Was Sie prüfen sollten – und nach jedem Update erneut.
Die meisten WordPress-Websites nutzen eines von wenigen Formular-Plugins: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms und einige andere. Jedes davon lässt sich sicher betreiben – und jedes lässt sich sperrangelweit offen lassen. Der Unterschied liegt selten im Plugin selbst, sondern in den Einstellungen, den Erweiterungen drumherum, im Mailversand und darin, was mit den Nachrichten nach dem Eingang passiert.
- Halten Sie das Formular-Plugin und alle Erweiterungen aktuell, und löschen Sie, was Sie nicht mehr nutzen.
- Aktivieren Sie den Spamschutz des Plugins – Honeypot, CAPTCHA-Anbindung, Akismet, wo es passt – und prüfen Sie, ob er tatsächlich greift.
- Versenden Sie Benachrichtigungen per authentifiziertem SMTP von einer Adresse Ihrer eigenen Domain.
- Beschränken Sie Datei-Uploads nach Typ und Größe, und sorgen Sie dafür, dass hochgeladene Dateien nicht öffentlich auflistbar oder abrufbar sind.
- Halten Sie die Empfängeradresse aus der Seite und ihrem Quelltext heraus.
- Speichern Sie nur die Einträge, die Sie brauchen, und nur so lange wie nötig.
- Machen Sie nach jedem Update von WordPress, Theme oder Plugins einen kurzen Test.
Updates: das Formular-Plugin und alles drumherum
Formular-Plugins sind beliebte Angriffsziele, weil sie Eingaben von jedem im Internet annehmen. Sicherheitskorrekturen kommen als ganz normale Updates – die erste Regel ist also einfach: zügig aktualisieren, und zwar nicht nur das Haupt-Plugin. Erweiterungen für Zahlungen, Uploads, CRM-Anbindungen, bedingte Logik oder zusätzliche CAPTCHA-Anbieter sind eigener Code mit eigenen Schwachstellen. Dasselbe gilt für Plugins, die Sie einmal zum Testen installiert und dann vergessen haben. Deaktivieren reicht nicht: Deaktivierte Plugins liegen weiter auf dem Server, und ihre Dateien sind unter Umständen direkt erreichbar. Was Sie nicht nutzen, löschen Sie.
Spamschutz: einschalten – und nachweisen, dass er wirkt
Die meisten Formular-Plugins bringen eigene Spamschutz-Optionen mit oder binden externe Dienste an: ein Honeypot-Feld, das Bots ausfüllen und Menschen nie zu sehen bekommen, CAPTCHA-Anbindungen wie reCAPTCHA, hCaptcha oder Cloudflare Turnstile sowie Akismet, das Nachrichteninhalte mit einer Spam-Datenbank abgleicht. Was verfügbar ist, hängt vom Plugin und seiner Version ab – schauen Sie in die Einstellungen, statt etwas vorauszusetzen. Externe CAPTCHAs laden Skripte eines Drittanbieters, und Akismet übermittelt die eingegebenen Inhalte an einen externen Dienst – beides gehört in Ihre Datenschutzerklärung und, je nach Einrichtung, in Ihr Einwilligungsmanagement.
Häufiger ist allerdings ein anderes Problem: Schutz, der eingeschaltet ist, aber nicht wirkt. Ein CAPTCHA mit öffentlichen Testschlüsseln lässt alles durch. Ein Widget, dessen Skript von einem Caching- oder Optimierungs-Plugin oder durch einen JavaScript-Fehler blockiert wird, hält nichts auf. Ein Honeypot-Feld ohne die Styles, die es verstecken, wird von Screenreadern vorgelesen und von echten Besuchern ausgefüllt. Öffnen Sie das Formular deshalb nach jeder Änderung in einem privaten Browserfenster, schauen Sie in die Browser-Konsole, prüfen Sie den Quelltext und senden Sie eine Testnachricht. Wenn Sie Schutz ohne Google möchten: Das kostenlose WordPress-Plugin von formexposed ergänzt Honeypot, Zeitprüfung und Proof-of-Work und prüft die Website nach Plugin-Updates erneut – eine von mehreren Möglichkeiten.
Mail: wie sie verschickt wird und wohin sie geht
Standardmäßig übergibt WordPress Mails an die PHP-Mailfunktion des Servers. Bei vielen Hostern sind diese Nachrichten nicht sauber authentifiziert und landen im Spam – oder verschwinden still. Versenden Sie stattdessen über ein SMTP-Plugin oder den Maildienst Ihres Hosters, mit einem echten Postfach samt Benutzername und Passwort und einer Absenderadresse Ihrer eigenen Domain, etwa einer eigenen forms@-Adresse. Die Domain braucht SPF-, DKIM- und DMARC-Einträge, die diesen Absender abdecken. Setzen Sie die Adresse des Besuchers nicht ins From-Feld: Sie gehört nicht zu Ihrer Domain, die Nachricht kann die DMARC-Prüfung also nicht bestehen und landet je nach Richtlinie der Besucher-Domain im Spam oder wird abgewiesen. Tragen Sie sie stattdessen als Reply-To ein – dann antworten Sie trotzdem mit einem Klick.
Die Empfängeradresse gehört in die Plugin-Einstellungen, nicht in die Seite. Schauen Sie in den Quelltext Ihrer Kontaktseite: Ein mailto-Link direkt neben dem Formular oder ein verstecktes Feld mit der Empfängeradresse liefert diese Adresse jedem Bot, der Adressen sammelt. Bei älteren oder selbst gebauten Formularen kann ein verstecktes Empfängerfeld noch mehr Schaden anrichten: Vertraut der Server diesem Feld, kann jeder es ändern und über Ihr Formular Mails an beliebige Adressen schicken.
Uploads und gespeicherte Einträge
Datei-Uploads sind die riskanteste Formularfunktion. Fragen Sie sich deshalb zuerst, ob Sie sie überhaupt brauchen. Wenn ja, erlauben Sie nur die Dateitypen, die Sie tatsächlich erwarten – etwa PDF und gängige Bildformate –, statt einzelne gefährliche zu sperren, und setzen Sie eine Größenbeschränkung. Prüfen Sie, wo das Plugin hochgeladene Dateien ablegt: Sie dürfen nicht in einem öffentlichen Verzeichnis auflistbar sein und sollten möglichst gar nicht unter einer erratbaren Adresse erreichbar sein. Löschen Sie Uploads, sobald sie bearbeitet sind, oder verschicken Sie sie als Anhang, statt sie auf dem Server zu behalten.
Viele Formular-Plugins oder ihre Erweiterungen speichern jede Einsendung in der WordPress-Datenbank, oft samt Spam. Das kann als Sicherung nützlich sein, wenn eine Mail nicht ankommt, ist aber auch ein wachsender Bestand personenbezogener Daten. Nach dem DSGVO-Grundsatz der Speicherbegrenzung (Art. 5 Abs. 1 lit. e) werden solche Daten nicht länger als nötig aufbewahrt. Legen Sie fest, ob Sie gespeicherte Einträge brauchen, welche Felder sich lohnen und wie lange. Nutzen Sie dann die automatische Löschfunktion des Plugins, falls vorhanden, oder löschen Sie alte Einträge regelmäßig. Denken Sie daran, dass Datenbank-Backups dieselben Daten enthalten.
Nach jedem Update
- 1Öffnen Sie die Kontaktseite in einem privaten Browserfenster und prüfen Sie, ob Formular und Spamschutz korrekt angezeigt werden und die Browser-Konsole keine Fehler meldet.
- 2Prüfen Sie den Quelltext: Honeypot-Feld und CAPTCHA-Skript sind noch da, die Empfängeradresse nicht.
- 3Senden Sie eine Testnachricht und prüfen Sie, ob sie im Posteingang ankommt statt im Spam und ob SPF, DKIM und DMARC laut Mail-Header bestanden sind.
- 4Kontrollieren Sie die wichtigen Einstellungen: Empfänger, Absenderadresse, erlaubte Upload-Typen und -Größen, Aufbewahrungsdauer gespeicherter Einträge.
- 5Prüfen Sie, ob der Link zur Datenschutzerklärung und gegebenenfalls Einwilligungstexte am Formular noch angezeigt werden.
- 6Notieren Sie Datum und Prüfpunkte – so wissen Sie, wann das Formular zuletzt nachweislich funktioniert hat.
Als Routine dauert das alles nicht lange, und es fängt genau die stillen Ausfälle ab, die sonst wochenlang niemand bemerkt. Wenn Sie einen Blick von außen möchten: Ein kostenloser Check auf formexposed.com sieht sich die öffentlichen Formularseiten einer Website an, ohne etwas abzusenden, und zeigt, ob der erwartete Schutz vorhanden und wirksam eingerichtet ist – ganz ohne Konto.