Spam via contactformulier stoppen: honeypot, tijdval, CAPTCHA | We.Inc
Stop spam via het contactformulier van uw website met een honeypot-veld, een tijdval en een gratis CAPTCHA zoals Turnstile, reCAPTCHA of hCaptcha, gecontroleerd op uw server. Met live demo.
Spam via uw contactformulier stoppen
Stapel goedkope controles vóór hinderlijke. Voeg een verborgen honeypot-veld toe dat mensen nooit zien maar bots wel invullen, weiger formulieren die sneller zijn verstuurd dan iemand kan typen, en als er dan nog spam doorkomt, voeg dan een CAPTCHA-dienst toe zoals Turnstile, reCAPTCHA of hCaptcha waarvan uw server het token controleert.
Spamverdediging vergeleken
Methode
Wat bezoekers merken
Houdt tegen
Servercode nodig
Honeypot-veld
Niets
Eenvoudige bots die elk veld invullen
Ja, een controle van één regel
Tijdval
Niets
Bots die direct versturen
Ja
Cloudflare Turnstile
Meestal niets, soms een selectievakje
De meeste geautomatiseerde berichten
Ja, een siteverify-aanroep
reCAPTCHA v3
Niets; u krijgt een score
De meeste geautomatiseerde berichten
Ja, controleren en een drempel kiezen
hCaptcha
Soms een puzzel
De meeste geautomatiseerde berichten
Ja, een siteverify-aanroep
Spambots doorzoeken het web naar formulieren en versturen er automatisch berichten mee. Uw server kan niet zien wie er typt, dus elke verdediging werkt door gedrag op te merken dat een mens niet zou vertonen, of door een aparte dienst voor de bezoeker te laten instaan. Probeer de eerste twee verdedigingen in de demo en kopieer daarna de servercontrole die erbij hoort.
Voeg één extra invoerveld toe met een verleidelijke naam, zoals website, en verberg het met CSS in plaats van type=hidden.
Voeg een verborgen veld toe met het tijdstip waarop het formulier werd getoond.
Gooi op de server elke inzending weg waarbij de val een waarde heeft of het tijdsverschil onder een paar seconden ligt.
Blijft de spam komen, voeg dan een CAPTCHA-widget toe en controleer het token op de server voordat u het bericht opslaat of mailt.
Accepteer gevangen inzendingen stilletjes en gooi ze weg. Een foutmelding leert de bot wat hij moet veranderen.
Geef het valveld tabindex="-1" en aria-hidden="true" zodat toetsenbord- en schermlezergebruikers er nooit in terechtkomen.
Houd de tijdval kort, rond de drie seconden. Met automatisch invullen in de browser zijn echte mensen snel klaar met een formulier.
Zet een geheime CAPTCHA-sleutel nooit in paginacode. Die hoort alleen op de server.
Veelgestelde vragen
Wat is een honeypot-veld?
Een invoerveld dat wel in de code van het formulier staat maar voor mensen verborgen is. Bezoekers laten het leeg omdat ze het nooit zien; bots die elk veld invullen dat ze vinden, zetten er iets in en verraden zich daarmee.
Is er een gratis alternatief voor reCAPTCHA?
Ja. Cloudflare Turnstile en hCaptcha bieden allebei een gratis abonnement met dezelfde opzet: een script en een widget op de pagina, daarna een serveraanroep naar een siteverify-adres met uw geheime sleutel en het token van de bezoeker. Bekijk de actuele abonnementspagina van elke aanbieder voor de limieten.
Toont reCAPTCHA v3 een puzzel?
Nee. Volgens de documentatie van Google geeft v3 een score terug waarbij 1.0 zeer waarschijnlijk een goede interactie is en 0.0 zeer waarschijnlijk een bot, en wordt aangeraden te beginnen met een drempel van 0.5. U bepaalt zelf wat u met lage scores doet.
Kan de widget alleen spam tegenhouden?
Nee. De documentatie van Cloudflare zegt duidelijk dat de widget aan de clientkant alleen uw formulieren niet beschermt. Een bot kan rechtstreeks naar het adres van uw formulier posten, dus de server moet het token controleren.
Waarom krijg ik nog steeds spam met een honeypot?
Sommige bots draaien een echte browser en vullen alleen zichtbare velden in, en sommige spam wordt door mensen getypt. Voeg de tijdval toe en daarna een CAPTCHA. Weiger ook berichten vol links als uw formulier die nooit nodig heeft.
Waarom de gratis controles eerst komen
Een honeypot en een tijdval kosten bezoekers niets en vangen het grote deel van de spam dat van primitieve scripts komt. Een CAPTCHA voegt een script van derden toe, een vermelding in uw privacyverklaring en soms een uitdaging, dus bewaar die voor wanneer u hem nodig hebt.
Verberg de val op de juiste manier
Gebruik CSS die het veld buiten beeld plaatst in plaats van type="hidden", want veel bots slaan verborgen invoervelden over. Zet automatisch invullen uit met autocomplete="off", want een browser die het veld invult, zou een echte persoon als bot aanmerken.
MDN merkt op dat browsers autocomplete="off" kunnen negeren bij inlogvelden, dus noem de val niet email of password.
Controleer CAPTCHA-tokens op de server
Elke dienst zet een token in het formulier. Uw server stuurt dat token met uw geheime sleutel naar het siteverify-adres van de aanbieder en gaat alleen verder als het antwoord zegt dat success true is.
Turnstile-tokens zijn 300 seconden geldig en kunnen één keer gecontroleerd worden. reCAPTCHA v3-tokens zijn twee minuten geldig, dus vraag er een aan wanneer de bezoeker verstuurt, niet bij het laden van de pagina.
Kopieer de honeypot en de tijdval
De HTML komt in uw formulier. De servercontrole staat hier voor Node met Express, maar de logica is drie regels in elke taal.
Formulier met een honeypot-veld
De klasse .hp plaatst de val buiten beeld. Het veld started wordt door het kleine script gevuld met de huidige tijd.
Servercontrole (Node, Express)
Bots krijgen hetzelfde antwoord als mensen, zodat ze niet kunnen leren welke controle hen ving.
Turnstile, reCAPTCHA of hCaptcha toevoegen
Alle drie werken op dezelfde manier. Deze details komen uit de eigen documentatie van elke aanbieder.
CAPTCHA-diensten naast elkaar
Turnstile
reCAPTCHA v3
hCaptcha
Script
Geladen van Google met uw sitesleutel
Widget
<div class="cf-turnstile" data-sitekey>
Geen widget; roep execute aan bij verzenden
<div class="h-captcha" data-sitekey>
Controleren via
challenges.cloudflare.com/turnstile/v0/siteverify
Het verify-endpoint van Google
api.hcaptcha.com/siteverify
Geldigheid token
300 seconden, eenmalig
Twee minuten
Zie documentatie aanbieder
Resultaat
success true of false
success plus een score van 0.0 tot 1.0
success true of false
Een Turnstile-token controleren (Node 18 of later)
De widget voegt een veld met de naam cf-turnstile-response toe aan uw formulier. Bewaar de geheime sleutel in een omgevingsvariabele.
Live demo: honeypot plus tijdval
Er wordt niets verstuurd. Op Versturen drukken voert dezelfde controles uit als een server zou doen, gewoon hier in uw browser.
Uw naam
Bericht
Website (laat dit leeg)
Doe als een bot: vul het verborgen veld in
Versturen
Opnieuw beginnen
Vul het formulier in en druk op Versturen om te zien wat de servercontrole beslist.
Geaccepteerd: de val was leeg en er waren {n} seconden verstreken. Een echt formulier zou het bericht nu versturen.
Weggegooid: het verborgen veld had een waarde, dus dit lijkt op een bot. De bezoeker zou toch een bedankbericht zien.
Weggegooid: verstuurd na {n} seconden, sneller dan het minimum van {m} seconden.
Het verborgen veld wordt hier omlijnd getoond, zodat u ziet wat bots zien.