Come bloccare lo spam nel modulo di contatto: honeypot, trappola temporale, CAPTCHA | We.Inc
Blocca lo spam nel modulo di contatto del tuo sito con un campo honeypot, una trappola temporale e un CAPTCHA gratuito come Turnstile, reCAPTCHA o hCaptcha, verificato sul tuo server. Demo dal vivo.
Come bloccare lo spam nel modulo di contatto
Metti i controlli economici prima di quelli fastidiosi. Aggiungi un campo honeypot nascosto che le persone non vedono mai ma che i bot compilano, rifiuta i moduli inviati più velocemente di quanto una persona possa scrivere e, se lo spam passa ancora, aggiungi un servizio CAPTCHA come Turnstile, reCAPTCHA o hCaptcha il cui token viene verificato dal tuo server.
Difese antispam a confronto
Metodo
Cosa notano i visitatori
Blocca
Serve codice sul server
Campo honeypot
Niente
Bot semplici che compilano ogni campo
Sì, un controllo di una riga
Trappola temporale
Niente
Bot che inviano all'istante
Sì
Cloudflare Turnstile
Di solito niente, a volte una casella di controllo
Gran parte degli invii automatici
Sì, una chiamata a siteverify
reCAPTCHA v3
Niente; ricevi un punteggio
Gran parte degli invii automatici
Sì, verifica e scegli una soglia
hCaptcha
A volte un rompicapo
Gran parte degli invii automatici
Sì, una chiamata a siteverify
I bot di spam scandagliano il web alla ricerca di moduli e li inviano in automatico. Il tuo server non vede chi sta scrivendo, quindi ogni difesa funziona individuando un comportamento che una persona non avrebbe, oppure chiedendo a un servizio esterno di garantire per il visitatore. Prova le prime due difese nella demo, poi copia il controllo lato server che le accompagna.
Aggiungi un input in più con un nome invitante, come website, e nascondilo con il CSS invece che con type=hidden.
Aggiungi un campo nascosto che contiene l'ora in cui il modulo è stato mostrato.
Sul server, scarta ogni invio in cui la trappola ha un valore o in cui l'intervallo di tempo è inferiore a pochi secondi.
Se lo spam continua, aggiungi un widget CAPTCHA e verificane il token sul server prima di salvare o inviare via email il messaggio.
Accetta in silenzio e scarta gli invii finiti nella trappola. Mostrare un errore insegna al bot cosa cambiare.
Dai al campo trappola tabindex="-1" e aria-hidden="true" così chi usa la tastiera o uno screen reader non ci finisce mai dentro.
Tieni breve la trappola temporale, circa tre secondi. La compilazione automatica del browser permette alle persone vere di completare un modulo in fretta.
Non mettere mai la chiave segreta del CAPTCHA nel codice della pagina. Deve stare solo sul server.
Domande frequenti
Che cos'è un campo honeypot?
Un input presente nel codice del modulo ma nascosto alle persone. I visitatori lo lasciano vuoto perché non lo vedono mai; i bot che compilano ogni campo che trovano ci scrivono qualcosa, e così si tradiscono.
Esiste un'alternativa gratuita a reCAPTCHA?
Sì. Cloudflare Turnstile e hCaptcha offrono entrambi piani gratuiti con la stessa struttura: uno script e un widget nella pagina, poi una chiamata dal server a un indirizzo siteverify con la tua chiave segreta e il token del visitatore. Controlla la pagina dei piani aggiornata di ciascun fornitore per i limiti.
reCAPTCHA v3 mostra un rompicapo?
No. La documentazione di Google dice che v3 restituisce un punteggio in cui 1.0 indica un'interazione molto probabilmente legittima e 0.0 molto probabilmente un bot, e suggerisce di partire con una soglia di 0.5. Sei tu a decidere cosa fare con i punteggi bassi.
Il widget da solo può bloccare lo spam?
No. La documentazione di Cloudflare afferma chiaramente che il widget lato client da solo non protegge i tuoi moduli. Un bot può inviare direttamente all'indirizzo del modulo, quindi il server deve verificare il token.
Perché ricevo ancora spam con un honeypot?
Alcuni bot usano un browser vero e compilano solo i campi visibili, e parte dello spam è scritto da persone. Aggiungi la trappola temporale, poi un CAPTCHA. Rifiuta anche i messaggi pieni di link se il tuo modulo non ne ha mai bisogno.
Perché i controlli gratuiti vengono prima
Un honeypot e una trappola temporale non costano nulla ai visitatori e intercettano la gran parte dello spam che arriva da script rudimentali. Un CAPTCHA aggiunge uno script di terze parti, una voce nell'informativa sulla privacy e a volte una sfida, quindi tienilo per quando ti serve davvero.
Nascondi la trappola nel modo giusto
Usa del CSS che sposta il campo fuori dallo schermo invece di type="hidden", perché molti bot saltano gli input nascosti. Disattiva la compilazione automatica con autocomplete="off", dato che un browser che lo compila farebbe passare una persona vera per un bot.
MDN segnala che i browser possono ignorare autocomplete="off" nei campi di login, quindi non chiamare la trappola email o password.
Verifica i token CAPTCHA sul server
Ogni servizio inserisce un token nel modulo. Il tuo server invia quel token insieme alla chiave segreta all'indirizzo siteverify del fornitore e prosegue solo se la risposta dice che success è true.
I token Turnstile valgono 300 secondi e si possono verificare una sola volta. I token reCAPTCHA v3 durano due minuti, quindi richiedine uno quando il visitatore invia il modulo, non al caricamento della pagina.
Copia l'honeypot e la trappola temporale
L'HTML va nel tuo modulo. Il controllo lato server è mostrato per Node con Express, ma la logica sta in tre righe in qualsiasi linguaggio.
Modulo con un campo honeypot
La classe .hp sposta la trappola fuori dallo schermo. Il campo started viene riempito con l'ora corrente dal piccolo script.
Controllo lato server (Node, Express)
I bot ricevono la stessa risposta delle persone, così non possono capire quale controllo li ha fermati.
Aggiungere Turnstile, reCAPTCHA o hCaptcha
Tutti e tre funzionano allo stesso modo. Questi dettagli vengono dalla documentazione ufficiale di ciascun fornitore.
Servizi CAPTCHA a confronto
Turnstile
reCAPTCHA v3
hCaptcha
Script
Caricato da Google con la tua site key
Widget
<div class="cf-turnstile" data-sitekey>
Nessun widget; chiama execute all'invio
<div class="h-captcha" data-sitekey>
Verifica su
challenges.cloudflare.com/turnstile/v0/siteverify
L'endpoint di verifica di Google
api.hcaptcha.com/siteverify
Durata del token
300 secondi, uso singolo
Due minuti
Vedi la documentazione del fornitore
Risultato
success true o false
success più un punteggio da 0.0 a 1.0
success true o false
Verificare un token Turnstile (Node 18 o successivo)
Il widget aggiunge al modulo un campo chiamato cf-turnstile-response. Tieni la chiave segreta in una variabile d'ambiente.
Demo dal vivo: honeypot più trappola temporale
Non viene inviato nulla. Premendo Invia si eseguono gli stessi controlli che farebbe un server, direttamente nel tuo browser.
Il tuo nome
Messaggio
Sito web (lascia vuoto)
Comportati da bot: compila il campo nascosto
Invia
Ricomincia
Compila il modulo e premi Invia per vedere cosa decide il controllo lato server.
Accettato: la trappola era vuota e sono passati {n} secondi. Un modulo vero ora invierebbe il messaggio.
Scartato: il campo nascosto aveva un valore, quindi sembra un bot. Il visitatore vedrebbe comunque un messaggio di ringraziamento.
Scartato: inviato dopo {n} secondi, più velocemente del minimo di {m} secondi.
Il campo nascosto qui è visibile, con un bordo, così puoi vedere quello che vedono i bot.