Contactformulier zonder reCAPTCHA of rate limiting
> Onderdeel van: Uitgaande e-mail opgeschort — wat nu?
Een open contactformulier op je website is voor bots een geschenk. Als er geen bescherming op zit (geen reCAPTCHA, geen honeypot, geen rate limiting), kunnen ze in korte tijd duizenden formulieren invullen. Elk daarvan triggert een e-mail vanuit jouw mailbox — en zo loopt de wachtrij vol.
Een variant hierop: formulieren waarbij het invoerveld onbeperkt veel ontvangers toestaat, of waar de bot het "to"-veld kan manipuleren. Dat heet form-to-email injection en is in feite een open relay.
Wanneer past dit op jou?
Eén of meer van deze zaken klopt:
- Je website heeft een contact-, offerte-, aanmeld- of nieuwsbriefformulier.
- Je hebt geen reCAPTCHA of vergelijkbare bescherming op die formulieren.
- Je krijgt zelf de laatste tijd opvallend veel spam-inzendingen van het eigen formulier.
- De berichten in de wachtrij gaan naar willekeurige onbekende adressen (zoals in het voorbeeld in je meldingsmail).
- Je inboxwachtwoord lijkt veilig en je vindt geen malware of gehackte website.
Stappenplan
Stap 4.1 — Identificeer welk formulier wordt misbruikt
Open de wachtrij-voorbeelden uit de meldingsmail die we je hebben gestuurd. Kijk naar:
- From: vaak staat hier een adres als
noreply@jouwdomein.nlofinfo@jouwdomein.nl— dat verraadt welke mailbox het formulier gebruikt. - Subject: komt vaak overeen met het onderwerp-veld in je formulier ("Nieuw contactverzoek", "Offerte aangevraagd").
- Inhoud: vaak zie je terug welke velden zijn ingevuld — dat helpt om het juiste formulier te vinden.
Stap 4.2 — Voeg reCAPTCHA toe
Google reCAPTCHA is gratis en blokkeert het overgrote deel van geautomatiseerde spam.
Voor WordPress:
Installeer een plug-in zoals:
- Contact Form 7 heeft ingebouwde reCAPTCHA-ondersteuning
- WPForms (gratis versie)
- Gravity Forms (betaald)
- Algemene optie: Advanced Google reCAPTCHA — werkt voor login én formulieren
Voor maatwerk-formulieren:
- Registreer je site op https://www.google.com/recaptcha/admin
- Kies reCAPTCHA v3 (onzichtbaar, beste gebruikerservaring) of v2 ("Ik ben geen robot")
- Volg de documentatie: https://developers.google.com/recaptcha/intro
Alternatieven voor reCAPTCHA:
- hCaptcha — privacyvriendelijker alternatief
- Cloudflare Turnstile — onzichtbaar, gratis
Stap 4.3 — Voeg een honeypot toe (extra laag)
Een honeypot is een verborgen veld dat een echte bezoeker niet ziet, maar een bot wel invult. Wordt het veld ingevuld, dan negeert je formulier de inzending. Eenvoudig en effectief — meeste form-plug-ins hebben dit ingebouwd (vaak als optie "honeypot" of "anti-spam").
Stap 4.4 — Beperk het aantal inzendingen (rate limiting)
Stel in dat hetzelfde IP-adres niet vaker dan bijvoorbeeld 5 keer per minuut of 20 keer per uur kan inzenden. Per plug-in/CMS verschilt dit, maar zoek op "rate limit" of "submission limit" in de instellingen.
Stap 4.5 — Controleer op form-injection-kwetsbaarheden
Als je een eigen (zelf geprogrammeerd) PHP-script gebruikt voor formulieren: zorg dat de ontvanger vast in de code staat en nooit uit het formulier zelf wordt overgenomen. Velden uit $_POST mogen nooit zonder validatie in mail() -headers belanden — dat is hoe form-injection-aanvallen werken.
Bij twijfel: vervang je maatwerk-script door een goed onderhouden form-plug-in van je CMS.
Stap 4.6 — Wijzig daarna het mailboxwachtwoord
Mocht het formulier de inloggegevens van de mailbox gebruikt hebben (via SMTP), dan staan die mogelijk in een configuratiebestand of database. Wijzig na het beveiligen het wachtwoord en werk het bij in de formulier-instellingen. Zie Artikel 1 — Wachtwoord wijzigen.
Hoe weet je of dit de oorzaak was?
Goede signalen:
- ✅ De geblokkeerde berichten lijken op formulier-inzendingen (vaak met "Naam:", "Bericht:", etc. in de tekst).
- ✅ Je formulier had geen reCAPTCHA / honeypot.
- ✅ Je hebt geen WordPress/CMS-infectie kunnen vinden, maar wel formulieren op je site.
Klaar?
Formulier beveiligd, getest dat het werkt, en wachtwoord bijgewerkt? Ga naar Stap 7 — Melden dat het is opgelost.