Puoi ridurre lo spam senza chiedere a tutti di risolvere CAPTCHA. Inizia con tre controlli: honeypot per alcuni invii automatici, validazione sul server e limiti di frequenza. Ognuno affronta un problema diverso. Nessuno distingue con certezza un messaggio ben scritto di un cliente da quello di uno spammer.
La guida mostra come aggiungere l’honeypot all’HTML, cosa controlla mailcontact dietro l’endpoint e come verificare il risultato. Se devi ancora scegliere come ricevere gli invii, inizia dalla guida a moduli di contatto per siti statici.
Cosa fa davvero un campo honeypot
Un honeypot è un campo di testo che i visitatori normali devono lasciare vuoto. È fuori dal modulo visibile e dal normale ordine di tabulazione. Un bot che compila indiscriminatamente i campi può riempire anche questo; il server usa quel valore per scartare l’invio.
Il campo nascosto da solo non fa nulla. Il backend deve riconoscerlo e controllarlo prima di salvare o notificare. Con mailcontact il nome supportato è company_website. Un valore non vuoto dopo la rimozione degli spazi iniziali e finali fa restituire all’endpoint la consueta risposta di successo senza salvare il messaggio. L’invio scartato non consuma la quota mensile.
Aggiungi un honeypot al modulo di contatto HTML
Per l’integrazione consigliata, carica lo script MailContact ospitato: inserisce il controllo all’inizializzazione e gestisce l’invio e la verifica automatica. L’esempio manuale sotto è per moduli nativi e integrazioni API dirette.
Incollalo nel modulo che contiene già email e messaggio del visitatore. Usa una classe specifica per evitare che uno stile estraneo riveli accidentalmente il campo.
<!-- Add inside your existing contact form. -->
<div class="contact-meta" aria-hidden="true">
<label for="contact-website">Website</label>
<input id="contact-website" type="text" name="company_website"
tabindex="-1" autocomplete="off" />
</div>
<style>
.contact-meta {
position: absolute;
left: -9999px;
width: 1px;
height: 1px;
overflow: hidden;
}
</style>Il CSS sposta il campo fuori dalla pagina visibile. tabindex="-1" lo rimuove dalla normale navigazione con Tab, e aria-hidden nasconde il contenitore alle tecnologie assistive. autocomplete="off" chiede al browser di non compilarlo. Non rendere obbligatorio questo campo: un invio legittimo deve lasciarlo vuoto.
Considera quegli attributi parte dell’implementazione e provali. Compilazione automatica, gestori password e CSS possono interagire in modo imprevisto. Se la trappola si compila durante una visita normale, il visitatore può vedere successo anche se l’invio è scartato. È un falso positivo da correggere prima della pubblicazione, non prova di un buon antispam.
Includi l’honeypot negli invii JavaScript
new FormData(form) include automaticamente il campo con nome. Se costruisci il JSON a mano, includi company_website con gli altri campi. Ometterlo restituisce un FORM_CHECK_MISSING errore. Lo script ospitato aggiunge il campo automaticamente; i moduli SDK possono chiamare MailContact.prepare(form) una volta prima dell’interazione. Il nostro modulo di contatto completo con fetch usa FormData e include questo campo.
Un controllo solo nel JavaScript del browser si aggira facilmente inviando una richiesta diretta all’endpoint. La validazione deve avvenire anche sul server, oltre che nell’interfaccia; Guida MDN alla convalida dei moduli spiega perché la convalida del browser aiuta l’utente ma non garantisce la sicurezza.
Combina la trappola con convalida e limiti di frequenza
Un honeypot intercetta un comportamento automatico. Non limita la frequenza delle chiamate all’endpoint né la quantità di dati inviata. mailcontact applica controlli aggiuntivi a ogni richiesta del modulo:
- Campi obbligatori: un indirizzo email sintatticamente valido e un messaggio non vuoto. Un formato email valido non dimostra che il mittente possieda quell’indirizzo.
- Limiti dei campi: fino a 200 caratteri per il nome, 300 per l’oggetto, 320 per l’email e 5.000 per il messaggio.
- Dimensione della richiesta: i corpi superiori a 64 KB vengono rifiutati.
- Frequenza delle richieste: 20 richieste dal modulo al minuto per IP e un limite di 60 messaggi accettati al minuto per casella.
I limiti di frequenza sono separati dalle quote dei piani. Free permette 50 invii accettati per periodo mensile, Pro 1.000 messaggi in entrata nell’account. Richieste non valide rifiutate e honeypot scartati non consumano quota. Lo spam che supera i controlli ed è accettato conta. Vedi la riferimento della protezione antispam per le regole attuali.
Prova sia il percorso del visitatore sia la trappola per i bot
- Invia normalmente: lascia vuota la trappola e invia un messaggio dal modulo reale. Verifica che arrivi nella casella.
- Usa la tastiera: percorri la pagina con Tab e verifica che il campo nascosto non riceva il focus.
- Prova la compilazione automatica: lascia compilare al browser i campi visibili, poi controlla il valore dell’honeypot. Deve essere ancora vuoto.
- Compila apposta la trappola: in una prova controllata, invia un valore non vuoto per
company_websitevalore. L’endpoint deve confermare il successo senza nuovi messaggi o notifiche. - Rimuovi la verifica: l’invio deve fallire con
FORM_CHECK_MISSINGconservando la bozza. - Prova una richiesta rifiutata: un messaggio vuoto deve restituire un errore di validazione e la pagina deve conservare ciò che il visitatore ha scritto.
Prova anche dopo modifiche a builder, CSS o script. Un redesign può togliere l’honeypot dal payload pur lasciandolo nella pagina. Controllare solo l’aspetto non rileva la regressione.
Quando lo spam passa comunque
Un bot può lasciare vuoto l’honeypot, usare campi plausibili e inviare lentamente per restare sotto i limiti. Anche uno spammer umano può farlo. MailContact combina i punteggi degli scanner con controlli locali dei contenuti e rilevamento di campagne per progetto. I messaggi sospetti possono richiedere una prova di lavoro automatica; lo spam evidente resta in Spam per 30 giorni senza notifiche né consumo di quota. Lo script ospitato gestisce la verifica e conserva le bozze fallite. La prova di lavoro aumenta il costo dell’automazione senza dimostrare che il visitatore sia umano. Controlla Spam per i falsi positivi e ripristina i messaggi legittimi.
Conserva alcuni messaggi indesiderati di esempio e annota quale progetto li riceve. Contattaci con quel contesto se i controlli esistenti non si adattano al traffico. Se invece i bot raccolgono un’email pubblica è un altro problema: la guida a non pubblicare l’email personale sul sito spiega le opzioni di contatto disponibili.