Vai al contenuto

Blog web design, grafica e dintorni

Illustrazione di un Honeypot per Contact Form 7 in WordPress, con un modulo di contatto protetto da uno scudo per rappresentare la protezione dallo spam senza plugin aggiuntivi.

Come creare un Honeypot per Contact Form 7 in Gutenberg senza plugin

Quando hai un sito online succede sempre questo: apri la casella di posta collegata al tuo sito e trovi decine di messaggi inutili inviati da bot. Nel tempo diventano sempre più frequenti fino a rendere difficile distinguere una richiesta di contatto vera dallo spam.

La soluzione più comune è installare l’ennesimo plugin antispam. Funziona? Sì. Ma ogni plugin aggiunto significa anche più aggiornamenti, più manutenzione e un altro elemento da tenere sotto controllo. Se realizzi siti WordPress o ne gestisci diversi, sai bene che la regola “meno plugin, meglio è” non vale sempre, ma quando puoi applicarla è quasi sempre una buona idea.

Nei siti che realizzo con WordPress e Contact Form 7 preferisco un approccio diverso: utilizzo un semplice Honeypot, creato direttamente nel modulo con Gutenberg e qualche riga di codice, senza installare plugin aggiuntivi. È una soluzione leggera, veloce da implementare e, nella maggior parte dei siti, più che sufficiente per bloccare gran parte dello spam.

In questa guida ti mostrerò esattamente come lo realizzo, spiegandoti non solo i passaggi da seguire, ma anche perché funzionano, quali errori evitare e quando, invece, è il caso di affiancare questa tecnica a sistemi di protezione più avanzati.


Perché usare un Honeypot invece di un plugin antispam

Ogni plugin installato aggiunge funzionalità, ma anche aggiornamenti, manutenzione e possibili incompatibilità. Per questo, quando posso risolvere un problema con una soluzione semplice e affidabile, preferisco evitare di appesantire WordPress con un’estensione in più.

Nel caso di Contact Form 7, un Honeypot offre diversi vantaggi:

  • Niente plugin aggiuntivi
    Meno dipendenze e meno aggiornamenti.
  • Esperienza utente migliore
    Nessun CAPTCHA da risolvere.
  • Più leggero
    Il modulo resta semplice e veloce.
  • Meno spam
    I bot vengono intercettati prima dell’invio.

Meno plugin ≠ sito migliore

Installa un plugin solo se:
✔ aggiunge una funzione necessaria
✔ è aggiornato e affidabile
✔ non esiste una soluzione più semplice

Perchè utilizzo questo metodo:
Se posso ottenere lo stesso risultato con poche righe di codice, preferisco una soluzione più leggera, semplice da mantenere e meno soggetta a problemi nel tempo.


Come funziona un Honeypot

Il funzionamento di un Honeypot è più semplice di quanto sembri. L’idea è sfruttare il comportamento dei bot, che tendono a compilare automaticamente tutti i campi di un modulo. Gli utenti reali, invece, vedono solo quelli visibili e non interagiscono con il campo nascosto.

Schema che mostra il funzionamento di un Honeypot in Contact Form 7: l'utente reale invia il modulo senza compilare il campo nascosto, mentre il bot lo compila e il messaggio viene bloccato come spam.

In parole semplici:
Il campo Honeypot è invisibile agli utenti ma visibile ai bot. Se viene compilato, il sistema capisce che si tratta di spam e blocca l’invio.


Cosa serve prima di iniziare

Prima di iniziare è utile verificare di avere tutto il necessario. La procedura è piuttosto semplice e richiede pochi minuti, ma avere già gli strumenti giusti ti permetterà di seguire il tutorial senza doverti fermare a metà.

Per creare un Honeypot lavoreremo su due elementi: il modulo di Contact Form 7, dove aggiungeremo il campo nascosto, e un piccolo snippet PHP che impedirà l’invio dei messaggi compilati dai bot. Niente plugin antispam, nessuna configurazione complessa e, soprattutto, nessuna modifica invasiva al sito.

Illustrazione che mostra gli elementi necessari per configurare un Honeypot in Contact Form 7: WordPress, modulo di contatto, CSS e snippet PHP

Prima di procedere verifica di avere:

  • WordPress aggiornato e funzionante
  • Contact Form 7 già installato con almeno un modulo attivo
  • La possibilità di modificare il modulo di contatto
  • Accesso al CSS del sito per nascondere il campo Honeypot
  • Un modo per aggiungere uno snippet PHP, ad esempio tramite WPCode oppure nel file functions.php del tema child.

Il mio consiglio:
Per questo tutorial utilizzerò WPCode. È il metodo che preferisco perché mantiene il codice separato dal tema e rende più semplice gestire eventuali modifiche o aggiornamenti futuri.


Come creare il campo Honeypot in Contact Form 7

Passiamo alla pratica: vediamo come aggiungere e configurare un campo Honeypot in Contact Form 7, passo dopo passo. Lo inseriremo nel modulo, lo renderemo invisibile agli utenti e infine verificheremo che sia stato configurato correttamente.

Icona che rappresenta l'apertura del modulo Contact Form 7 per iniziare la configurazione del campo Honeypot.

Apri il modulo di Contact Form 7

Apri il modulo di Contact Form 7 che desideri proteggere.

Icona che rappresenta l'inserimento del campo Honeypot nel modulo di Contact Form 7.

Inserisci il campo Honeypot

Aggiungi il campo Honeypot nel punto che preferisci del modulo.

Icona che rappresenta la scelta di un nome realistico per il campo Honeypot di Contact Form 7.

Scegli un nome credibile

Utilizza un nome realistico per non destare sospetti nei bot.

Icona che rappresenta il codice CSS utilizzato per rendere invisibile il campo Honeypot agli utenti.

Nascondi il campo con il CSS

Rendi il campo invisibile agli utenti tramite CSS.

Icona che rappresenta il controllo del corretto funzionamento del campo Honeypot in Contact Form 7.

Verifica che il campo sia nascosto

Controlla che il campo sia nascosto e che il modulo continui a funzionare.


Apri il modulo di Contact Form 7

Il primo passo consiste nell’aprire il modulo che desideri proteggere. Accedi alla bacheca di WordPress e vai su Contatti → Moduli di contatto, quindi seleziona il modulo sul quale vuoi aggiungere l’Honeypot.

Se hai più moduli, verifica di modificare quello corretto: una piccola distrazione in questa fase potrebbe farti perdere tempo durante i test finali.

Schermata di Contact Form 7 in WordPress con l'elenco dei moduli di contatto e il modulo da modificare evidenziato.

Inserisci il campo Honeypot

All’interno dell’editor del modulo aggiungi un normale campo di testo che fungerà da Honeypot. Per il momento non preoccuparti se il campo è ancora visibile: lo nasconderemo nel passaggio successivo tramite CSS.

Incolla questo codice nel punto del modulo che preferisci. Personalmente lo inserisco subito prima del pulsante di invio, così rimane semplice da individuare anche in futuro.

<div class="cf7-honeypot" aria-hidden="true">
	<label>
		Lascia vuoto questo campo
		[text website autocomplete:off tabindex:-1]
	</label>
</div>
Editor di Contact Form 7 con il codice del campo Honeypot inserito all'interno del modulo di contatto.

Scegli un nome credibile

Il nome del campo non è un dettaglio da sottovalutare. Molti bot compilano automaticamente tutti i campi disponibili e utilizzarne uno dall’aspetto naturale aumenta le probabilità che venga riempito.

Al contrario, nomi troppo espliciti come honeypot o spam possono essere riconosciuti dai bot più evoluti e ridurre l’efficacia della protezione.

Da evitare

honeypot
spam
robot
hidden

Consigliati

website
company
homepage
fax

Il mio consiglio:
Un nome come website o company appare credibile agli occhi dei bot e aumenta le probabilità che il campo venga compilato. Se scegli un nome diverso da website, ricordati di sostituirlo anche nello snippet PHP.


Nascondi il campo con il CSS

Ora è il momento di rendere invisibile il campo agli utenti. Aggiungi questa regola CSS nel tuo tema oppure nella sezione Aspetto → Personalizza → CSS aggiuntivo.

Il campo continuerà a essere presente nel codice HTML della pagina, ma verrà spostato fuori dall’area visibile senza alterare il layout del modulo.

.cf7-honeypot {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

Perché non uso display: none?
Alcuni bot ignorano automaticamente i campi nascosti con display: none o visibility: hidden. Spostarlo fuori dallo schermo è una soluzione generalmente più affidabile perché il campo continua a comportarsi come un normale elemento del modulo.


Verifica che tutto funzioni

Prima di passare allo snippet PHP, apri la pagina che contiene il modulo e verifica che il campo non sia visibile. Il form dovrà apparire esattamente come prima, senza spazi vuoti o anomalie.

Illustrazione che rappresenta la verifica del corretto funzionamento di un Honeypot in Contact Form 7 con un bot bloccato dalla trappola antispam.

Puoi fare un rapido controllo:

  • il campo Honeypot non è visibile;
  • il layout del modulo è rimasto invariato;
  • il modulo continua a essere compilabile.

Se è tutto a posto, la prima parte della configurazione è completata. Nel prossimo passaggio vedremo come intercettare il campo Honeypot e bloccare automaticamente i messaggi compilati dai bot.


Come bloccare i messaggi di spam

Il campo Honeypot è stato creato e nascosto correttamente, ma da solo non è ancora in grado di bloccare lo spam. Al momento è semplicemente un campo invisibile all’interno del modulo.

Per renderlo efficace dobbiamo dire a Contact Form 7 come comportarsi quando quel campo viene compilato. Se contiene un valore significa che, con ogni probabilità, il modulo è stato inviato da un bot e il messaggio dovrà essere rifiutato prima ancora di essere elaborato.

Lo faremo aggiungendo un piccolo snippet PHP. Sono poche righe di codice, ma sono quelle che trasformano il campo nascosto in una vera trappola per i bot.


Crea un nuovo snippet in WPCode

Per far sì che Contact Form 7 riconosca il campo Honeypot e blocchi automaticamente i messaggi di spam, dobbiamo aggiungere un piccolo snippet PHP.

Io utilizzo WPCode, perché permette di gestire gli snippet in modo semplice, senza modificare direttamente i file del tema. È una soluzione pratica, soprattutto se in futuro dovrai aggiornare o disattivare il codice.

Apri quindi WPCode → Code Snippets, clicca su Aggiungi Snippet e crea un nuovo snippet PHP. Nel passaggio successivo inseriremo il codice che controllerà il campo Honeypot.

Schermata di WPCode in WordPress con il pulsante "Aggiungi Snippet" evidenziato per creare uno snippet PHP dedicato al campo Honeypot di Contact Form 7.

Incolla il codice PHP

Una volta creato lo snippet, seleziona PHP Snippet come tipo di codice e incolla il codice seguente nell’editor di WPCode.

Lo snippet controlla il campo website a ogni invio. Se il campo è vuoto, Contact Form 7 continua normalmente; se contiene un valore, il messaggio viene identificato come spam e bloccato.

/**
 * Honeypot antispam per Contact Form 7.
 */

add_filter( 'wpcf7_spam', 'ta_cf7_honeypot_antispam', 20, 1 );

function ta_cf7_honeypot_antispam( $spam ) {

	// Se un altro controllo ha già rilevato spam, non serve continuare.
	if ( $spam ) {
		return $spam;
	}

	$honeypot = isset( $_POST['website'] )
		? trim( sanitize_text_field( wp_unslash( $_POST['website'] ) ) )
		: '';

	// Se il campo nascosto è stato compilato, considera l'invio spam.
	if ( '' !== $honeypot ) {
		$spam = true;
	}

	return $spam;
}

Prima di continuare
Salva e attiva lo snippet in WPCode. Se hai utilizzato un nome diverso da website, ricordati di modificarlo anche nello snippet PHP.


Come verificare che il sistema funzioni

Prima di considerare conclusa la configurazione, verifica che il modulo continui a funzionare correttamente. Compila tutti i campi visibili e invia un messaggio di prova. Se la configurazione è corretta:

  • il modulo viene inviato senza errori;
  • ricevi l’email di notifica;
  • il layout del modulo rimane invariato.

Il mio consiglio
Se nei giorni successivi noti una sensibile riduzione dei messaggi indesiderati, significa che il tuo Honeypot sta facendo il suo lavoro.


Errori da evitare

Anche un Honeypot molto semplice può smettere di funzionare per una piccola distrazione. Prima di cercare soluzioni più complesse, controlla questi aspetti: nella maggior parte dei casi il problema è qui.

Nome del campo diverso

Nome del campo diverso

Il nome del campo nel modulo e quello controllato nello snippet PHP devono essere identici.

Snippet non attivo

Snippet non attivo

Dopo aver salvato il codice, verifica che lo snippet sia effettivamente attivo in WPCode.

CSS non caricato

CSS non caricato

Se il CSS non viene applicato, il campo Honeypot potrebbe essere visibile anche agli utenti.

Cache non aggiornata

Cache non aggiornata

Dopo aver modificato CSS o snippet, svuota la cache del sito e del browser prima di eseguire i test.

Il mio consiglio
Quando qualcosa non funziona, controllo sempre questi quattro punti prima di cercare problemi più complessi. Nella maggior parte dei casi è sufficiente correggere uno di questi dettagli per far tornare tutto operativo.


Quando un Honeypot non basta

Nella maggior parte dei siti che realizzo un Honeypot è più che sufficiente per ridurre lo spam senza aggiungere plugin.

Se però il tuo sito riceve molti tentativi automatici o continua a essere bersaglio di bot, può essere utile affiancare una protezione aggiuntiva, come Cloudflare Turnstile o altri sistemi antispam.

Il mio consiglio
Parti sempre dalla soluzione più semplice. Se il problema persiste, aggiungi un livello di protezione in più solo quando è davvero necessario.

Illustrazione che confronta un Honeypot con una protezione antispam avanzata, evidenziando quando può essere utile aggiungere un livello di sicurezza in più.

Meno plugin, meno grattacapi

Se anche tu preferisci soluzioni semplici, pulite e facili da mantenere, sei nel posto giusto. Realizzo siti WordPress progettati per durare nel tempo, senza riempirli di plugin inutili.

Dai un’occhiata ai miei servizi per siti WordPress oppure contattami.

Ti va di parlarne?