Alessandro Aili - WordPress Developer
Alessandro Aili - WordPress DeveloperPlay Alessandro Aili - WordPress DeveloperDrag Alessandro Aili - WordPress DeveloperView
Alessandro Aili - WordPress Developer
  • Homepage
  • Chi sono
  • Portfolio
  • Aree di Attività
    • Sviluppo di Siti Web Personalizzati
    • Ottimizzazione delle Prestazioni
    • Sicurezza del Sito Web
    • Aggiornamenti e Manutenzione
    • Sviluppo di Temi e Plugin Personalizzati
    • Migrazione e Trasferimento del Sito
  • Blog
  • Contatti
Alessandro Aili - WordPress Developer
Alessandro Aili - WordPress Developer Alessandro Aili - WordPress Developer
  • Homepage
  • Chi sono
  • Portfolio
  • Aree di Attività
    • Sviluppo di Siti Web Personalizzati
    • Ottimizzazione delle Prestazioni
    • Sicurezza del Sito Web
    • Aggiornamenti e Manutenzione
    • Sviluppo di Temi e Plugin Personalizzati
    • Migrazione e Trasferimento del Sito
  • Blog
  • Contatti
MENU Alessandro Aili - WordPress Developer
  • Home
  • Sicurezza
  • Blog
  • Alternative a reCAPTCHA in WordPress: Turnstile, hCaptcha, proof-of-work e quello che succede quando il servizio non risponde

Alternative a reCAPTCHA in WordPress: Turnstile, hCaptcha, proof-of-work e quello che succede quando il servizio non risponde

Alessandro Aili - WordPress Developer
Alessandro Aili WordPress Developer

Data di pubblicazione

25 Settembre 2026

Tempo di lettura

21 minuti

Categoria

Sicurezza

Commenti

0

Un modulo di login con quattro tipi di protezione anti-bot, un servizio esterno, una sfida con le immagini, un calcolo sul dispositivo e un campo nascosto, e il collegamento al servizio interrotto

Le alternative a reCAPTCHA in WordPress si scelgono meglio sapendo cosa è cambiato in reCAPTCHA negli ultimi due anni. Le chiavi sono passate d’ufficio a Google Cloud, il servizio fa parte di Google Cloud Fraud Defense e la quota gratuita è di 10.000 verifiche al mese. Superata quella, se la fatturazione non è attiva, le verifiche fatte con la chiave segreta, quella che chiedono i plugin WordPress, passano tutte. Chi cerca un’alternativa oggi ha qualche motivo in più di prima.

Il servizio però è metà della scelta. L’altra metà è il plugin che lo collega al sito, che decide in quale punto del login avviene il controllo, cosa succede quando il servizio non risponde e quali moduli restano scoperti. Ho provato cinque plugin diffusi con lo stesso utente e le stesse richieste, e non ce ne sono due che si comportino allo stesso modo. Questa guida mette in fila le alternative per come funzionano, con quanto costano e dove mandano i dati, e poi quello che nessun pannello di impostazioni mostra: come si comportano i plugin, e come verificarlo da fuori.

Una nota sulle fonti. Tutto quello che segue l’ho verificato il 25 settembre 2026 sulla documentazione di Google Cloud, Cloudflare, hCaptcha, Friendly Captcha e ALTCHA, sulle linee guida del W3C e sul codice sorgente di WordPress 7.1 e dei plugin citati. I plugin e i due blocchi di codice sono stati provati, non solo letti, in un WordPress 7.1.2 vero e in italiano (WordPress Playground, PHP 8.5), con il servizio di verifica simulato per provare anche i casi in cui rifiuta il token o non risponde. Prezzi e quote cambiano spesso, e accanto a ogni cifra c’è la data.

Cosa è cambiato in reCAPTCHA fra il 2024 e il 2026

Fino al 2024 una chiave reCAPTCHA si creava nella console di amministrazione di Google, e lì restava. Poi Google ha spostato tutto su Google Cloud, con un calendario che la sua documentazione sulla migrazione scandisce per trimestri. Dal terzo trimestre del 2024 non si possono più creare chiavi Classic. Fra l’ultimo trimestre del 2025 e il primo del 2026 quelle che nessuno aveva migrato a mano sono finite in automatico in un progetto Google Cloud creato apposta, con un invito al proprietario per prenderne possesso. La chiave funziona anche se l’invito resta in sospeso, ma per modificarla bisogna accettarlo. Il 22 aprile 2026 è arrivato anche un nome nuovo. Google ha presentato Google Cloud Fraud Defense come l’evoluzione di reCAPTCHA, e nei termini di servizio di Google Cloud il prodotto compare con la dicitura “formerly reCAPTCHA Enterprise”. Chi usava reCAPTCHA è diventato cliente di Fraud Defense senza fare niente e senza cambi di prezzo. Il nome reCAPTCHA resta al componente che separa le persone dai bot.

Per un sito WordPress il cambiamento che pesa di più è la quota. Il livello gratuito, Essentials, copre 10.000 verifiche al mese per organizzazione, e il conteggio somma tutti i siti e tutte le chiavi dell’organizzazione. Con la fatturazione attiva si passa al livello Premium, gratuito fino alla stessa soglia, poi 8 dollari al mese fino a 100.000 verifiche e 1 dollaro ogni 1.000 oltre (confronto dei livelli, 25 settembre 2026).

Cosa succede oltre la quota dipende da come il sito chiede la verifica. Un plugin che ti chiede una chiave segreta usa il metodo più vecchio, SiteVerify, e nella console di Google Cloud quella chiave si recupera come chiave legacy.

Per queste richieste Google ha scelto di non bloccare nessuno.

Oltre la quota la risposta diventa success: true con punteggio 0,9, e l’errore sta solo in un campo della risposta che il visitatore non vede. Il metodo nuovo, CreateAssessment, fa l’opposto e risponde con un errore 429. Un sito che supera le 10.000 verifiche senza fatturazione ha quindi il CAPTCHA acceso sulla pagina e spento sul server fino al mese successivo.

Due dettagli ancora, per chi resta. Nella console di Google Cloud le versioni hanno nomi nuovi. La v3 dei plugin è la chiave “Website • score”, la v2 con la casella è “Website • checkbox”, e Google sconsiglia quest’ultima perché aggiunge attrito senza migliorare di molto la precisione; la nota del W3C sui CAPTCHA aggiunge che con la v2 chi naviga con la tastiera finisce spesso sulla sfida tradizionale di riserva. Sui dati, i termini di servizio dicono che servono solo a far funzionare e proteggere il servizio e che non vengono usati per la pubblicità personalizzata. Dopo il passaggio a Google Cloud, Google li tratta come responsabile del trattamento per conto del sito, e il cookie che imposta, _GRECAPTCHA, è dichiarato necessario nelle FAQ di reCAPTCHA.

Cosa controlla un CAPTCHA in WordPress, e cosa no

Il riquadro che si vede sulla pagina non protegge niente.

Il riquadro produce un token, una stringa che il browser manda insieme al modulo, e la protezione sta tutta nella verifica di quel token sul server. La documentazione di Cloudflare sulla verifica avverte che un token si può falsificare e che chiunque può mandare al modulo una stringa qualsiasi. I token valgono una volta sola e per poco, 300 secondi quelli di Turnstile e due minuti quelli di reCAPTCHA v3.

Dove fare la verifica lo decide il plugin. Su WordPress i punti sono i moduli di login, registrazione, recupero della password e commenti, e i plugin li accendono uno per uno. Il modulo per reimpostare la password va trattato come il login, perché anche lui dice a chiunque se un account esiste. Restano fuori due delle quattro porte che accettano una password. La REST API con le password applicazione non passa da nessun modulo, e xmlrpc.php riceve le credenziali dentro un documento XML, dove un token non ha posto. Nelle prove tre plugin su cinque lasciano passare gli accessi da XML-RPC come se il CAPTCHA non ci fosse. Gli altri due li respingono tutti, anche con la password giusta, e fermano insieme ai bot le app che usano quella porta.

Lo stesso vale per i commenti inviati dalla REST API. WordPress li accetta solo dagli utenti collegati, a meno che un tema o un plugin non li apra a tutti con il filtro rest_allow_anonymous_comments. Aperti così, non passano da preprocess_comment né da pre_comment_on_post, gli hook del modulo classico su cui i plugin fanno il controllo. Nelle prove un commento anonimo via REST, senza nessun token, è entrato con tutti e cinque i plugin, in attesa di moderazione.

L’ultimo dettaglio è il più tecnico, e cambia parecchio. WordPress confronta la password con il suo hash nel filtro authenticate, con priorità 20, e subito prima passa l’utente al filtro wp_authenticate_user. Un plugin che si aggancia lì scarta il bot prima che il server calcoli l’hash; uno che si aggancia ad authenticate con una priorità più alta arriva a lavoro fatto. Nelle prove hCaptcha for WP e Friendly Captcha controllano prima, il plugin di Turnstile, CAPTCHA 4WP e Advanced Google reCAPTCHA dopo.

Arrivare dopo costa il calcolo dell’hash per ogni tentativo su un nome utente esistente, e in due dei cinque plugin, con le impostazioni predefinite, costa di più. In uno il CAPTCHA viene controllato solo quando la password è già giusta, così un bot può provare password senza incontrarlo mai. Nell’altro, se nel modulo manca del tutto il campo del CAPTCHA, l’invio passa, ed è quello che fa un bot che manda soltanto nome utente e password. Non faccio i nomi, perché dal pannello non si vede e ognuno deve provare il suo: la prova sta più avanti, e bastano due richieste.

Le alternative, per come funzionano

Il W3C dedica ai CAPTCHA una nota intera, Inaccessibility of CAPTCHA, che nell’ultima versione, una bozza del 16 dicembre 2021, divide i sistemi in tre gruppi. Quelli che chiedono qualcosa alla persona, come lettere da trascrivere, audio, puzzle e immagini. Quelli che non chiedono niente, come i filtri antispam, il proof-of-work, le euristiche e gli honeypot. Infine quelli che si appoggiano a un servizio esterno, reCAPTCHA compreso. Per un sito WordPress le alternative che contano stanno in quattro famiglie, più una da lasciar perdere.

Una cosa accomuna i servizi esterni e il proof-of-work. Turnstile, reCAPTCHA, hCaptcha, Friendly Captcha e ALTCHA girano in JavaScript nel browser, e senza JavaScript il token non arriva e il server respinge il modulo. Chi naviga con JavaScript disattivato non riesce a inviarlo. Un honeypot generato dal server, come quello più avanti, non ha questo limite.

Cloudflare Turnstile, il servizio che decide senza chiedere

Cloudflare Turnstile fa girare nel browser una serie di piccole prove in JavaScript che il visitatore non vede, fra cui calcoli (proof-of-work e proof-of-space) e controlli sulle API del browser, e in base al risultato decide da solo. Non restituisce un punteggio come reCAPTCHA v3. Il token è valido o non lo è, e chi migra da v3 deve togliere la soglia dal codice. Il widget ha tre modalità. Managed, quella consigliata, mostra una casella solo se il visitatore sembra a rischio; Non-interactive non chiede mai niente; Invisible non si vede proprio.

Il piano gratuito è indicato da Cloudflare per siti personali, piccole e medie imprese e “la maggior parte delle applicazioni in produzione”, con verifiche illimitate, fino a 20 widget per account e 10 domini per widget (25 settembre 2026). Per chi arriva da reCAPTCHA c’è una modalità di compatibilità, ?compat=recaptcha, che imita l’API della v2. Il pannello di Cloudflare mostra per ogni widget quante sfide sono state emesse e quante risolte, con uno storico di 7 giorni nel piano gratuito, ed è il primo posto dove guardare se i moduli smettono di arrivare.

Non serve che il sito passi dalla rete di Cloudflare.

L’informativa di Turnstile, aggiornata al 18 giugno 2025, elenca i segnali raccolti: indirizzo IP, impronta TLS, user agent, chiave del sito e origine. Cloudflare li tratta come responsabile per conto del sito quando lo protegge, e come titolare, sulla base del legittimo interesse, quando li usa per migliorare il servizio. Sull’accessibilità la documentazione dice due cose diverse, conformità WCAG 2.2 AA nella pagina principale e AAA nella tabella dei piani, e in entrambi i casi è la dichiarazione del produttore.

Su WordPress il plugin dedicato più installato è Simple CAPTCHA with Cloudflare Turnstile (oltre 200.000 installazioni), e Contact Form 7 integra Turnstile senza plugin aggiuntivi. La configurazione passo passo, dalle chiavi ai moduli, ha una guida in calendario.

hCaptcha, le immagini da riconoscere e un’uscita per chi non le vede

hCaptcha nasce come sostituto di reCAPTCHA, e secondo hCaptcha per passare dall’uno all’altro bastano due righe di codice. A decidere l’esperienza del visitatore è il piano. In quello gratuito, Basic, il widget è una casella che può aprire una sfida con le immagini. La modalità passiva, che secondo il produttore fa passare il 99,9% delle persone senza chiedere niente, è del piano Pro, 99 dollari al mese con pagamento annuale o 139 con pagamento mensile, 100.000 verifiche incluse (25 settembre 2026).

Scegliere le immagini con un’auto è riconoscimento di oggetti, e sul login il criterio 3.3.8 delle WCAG 2.2 lo ammette al livello AA ma non al livello AAA, dove il 3.3.9 lo esclude. Per chi non può vedere le immagini hCaptcha offre due strade. Una sfida solo testuale, se il sito la attiva, e un cookie di accessibilità che la persona ottiene iscrivendosi sul sito di hCaptcha e che, sui siti che usano il servizio, la fa passare o le propone la sfida testuale.

È una soluzione che chiede un passaggio in più proprio a chi ne ha già abbastanza.

L’azienda è Intuition Machines, negli Stati Uniti, aderisce al Data Privacy Framework fra Unione europea e Stati Uniti e per i siti che la usano tratta i dati come responsabile. Il plugin è hCaptcha for WP (oltre 80.000 installazioni).

Friendly Captcha e ALTCHA, quando il lavoro lo fa il dispositivo

Nel proof-of-work il dispositivo del visitatore risolve un piccolo problema di calcolo e il server verifica il risultato. Per il W3C non crea problemi diretti di accessibilità, e al massimo rallenta i dispositivi più vecchi.

Chi vuole mandare mille moduli deve fare il calcolo mille volte.

Friendly Captcha è un’azienda tedesca. Aggiunge al calcolo dei segnali di rischio, che ne alzano la difficoltà quando il visitatore sembra sospetto, non usa cookie e offre anche un servizio solo europeo. Non ha un piano gratuito. Si parte da 9 euro al mese per un dominio e 1.000 richieste, e i data center dedicati, per esempio solo in Europa, sono nel piano Advanced da 200 euro al mese per 50.000 richieste (piani al 25 settembre 2026). Il plugin ufficiale, Friendly Captcha for WordPress (oltre 10.000 installazioni), ha un comportamento da conoscere prima di installarlo. Quando non riesce a verificare, perché il servizio non risponde o perché la chiave API è sbagliata, lascia passare. Il codice lo dichiara con un commento esplicito, “fail open (intentional)”, e nelle prove un login con il servizio irraggiungibile è entrato. Se l’errore dipende dalla chiave, nel pannello compare un avviso.

ALTCHA fa lo stesso lavoro con codice libero, sotto licenza MIT, che gira sul tuo server senza cookie e senza servizi esterni. Il suo plugin per WordPress è stato chiuso su WordPress.org il 25 maggio 2026 per una violazione delle linee guida, e oggi si scarica da GitHub (versione 3.3.0 del 24 agosto 2026). Un plugin che sta fuori dalla directory va valutato con più attenzione del solito, con i criteri per valutare un plugin di sicurezza; ALTCHA c’è anche nella versione Pro, a pagamento, di Admin and Site Enhancements.

Honeypot, tempi e filtri: le difese senza sfida

Per i commenti e i moduli di contatto ci sono difese che non chiedono niente a nessuno. Il W3C le mette fra gli approcci non interattivi, e sono gli honeypot, le euristiche e i filtri antispam.

WordPress ne ha già qualcuna. Se lo stesso indirizzo IP o la stessa email commentano due volte a meno di 15 secondi di distanza, il secondo commento viene respinto. In Impostazioni → Discussione, alla voce “Moderazione commenti”, il “Numero massimo di link consentiti in un commento prima che questo venga sottoposto a moderazione” vale 2, quindi un commento con due link o più aspetta l’approvazione, e le caselle “Il commento deve essere approvato manualmente” e “Gli autori di un commento devono avere un commento già approvato in precedenza” decidono chi compare subito. Sono le impostazioni dei commenti da sistemare in un’installazione nuova.

Poi ci sono i plugin. Akismet (oltre 5 milioni di installazioni) confronta commenti e invii dei moduli con il suo archivio globale di spam, quindi il testo passa dal servizio di Automattic; la chiave è gratuita per i blog personali e a pagamento per i siti commerciali, da 9,95 euro al mese con fatturazione annuale (prezzi al 25 settembre 2026). Antispam Bee (oltre 700.000) lavora sui commenti con controlli locali e dichiara di non mandare dati personali a terzi. WP Armour (oltre 400.000) aggiunge ai moduli un honeypot con JavaScript, senza chiamate esterne.

Un honeypot è un campo che le persone non vedono e che molti programmi compilano, perché compilano tutto quello che trovano. Per i commenti bastano poche righe in un mu-plugin.

<?php
/**
 * Plugin Name: Honeypot per i commenti
 * Description: Un campo che le persone non vedono e i programmi compilano. Se arriva pieno, il commento viene respinto. Va in wp-content/mu-plugins/.
 */

// Il nome del campo: uno qualunque, purché il modulo non lo usi già.
const HONEYPOT_CAMPO = 'sito_personale';

// Il campo, fuori dallo schermo, fuori dall'ordine di tabulazione e nascosto agli screen reader.
// L'etichetta resta, per chi lo trovasse lo stesso.
add_action( 'comment_form_after_fields', function () {
	printf(
		'<p aria-hidden="true" style="position:absolute;left:-9999px;">'
		. '<label for="%1$s">Lascia vuoto questo campo</label> '
		. '<input type="text" id="%1$s" name="%1$s" value="" tabindex="-1" autocomplete="off"></p>',
		esc_attr( HONEYPOT_CAMPO )
	);
} );

// Il controllo, prima che WordPress decida se approvare il commento.
add_filter( 'pre_comment_approved', function ( $approvato ) {
	if ( ! empty( $_POST[ HONEYPOT_CAMPO ] ) ) {
		return new WP_Error( 'honeypot', 'Il commento non è stato inviato.', 403 );
	}
	return $approvato;
} );

Il campo sta fuori dallo schermo, fuori dall’ordine di tabulazione e dentro un contenitore con aria-hidden, così non lo raggiungono né la tastiera né uno screen reader. L’etichetta resta per chi dovesse trovarlo lo stesso, come nell’esempio citato dal W3C, un campo con scritto di lasciarlo vuoto. Il controllo sta sul filtro pre_comment_approved, da cui passano sia il modulo classico sia la REST API; via REST però il campo non arriva, perché il commento viaggia in JSON, e l’honeypot lì non fa niente. Nelle prove, con il campo vuoto il commento è stato salvato e con il campo compilato WordPress ha risposto 403; dalla tastiera il focus è passato dalla casella dei cookie al pulsante di invio senza fermarsi sul campo. I limiti sono due. L’honeypot non ferma i bot scritti per un sito preciso e non protegge il login, dove serve il limite ai tentativi. Alcuni honeypot aggiungono un controllo sul tempo e respingono i moduli inviati pochi secondi dopo l’apertura della pagina; con la cache di pagina, se l’orario è scritto dal server nell’HTML, il conto parte da quando la pagina è finita in cache, e il controllo perde senso.

Lettere deformate, somme e quiz, da lasciar perdere

Il W3C è netto sui CAPTCHA con i caratteri deformati, in gran parte inaccessibili e poco sicuri. Escludono chi non vede e chi usa uno screen reader, mettono in difficoltà chi ha la dislessia e chi non ha familiarità con l’alfabeto latino. Somme e quiz spostano la barriera senza toglierla, perché una persona con discalculia fa fatica anche con tre più quattro, e sul login il criterio 3.3.8 non li ammette senza un metodo alternativo; fra gli esempi della guida del W3C al criterio c’è proprio un CAPTCHA con un’equazione.

Su WordPress sono di questo tipo Really Simple CAPTCHA (oltre 300.000 installazioni), l’immagine con le lettere che Contact Form 7 può usare, e il Custom Captcha di WPForms, con somme o domande a scelta, compreso dalla licenza Basic in su. In un audit di accessibilità sono fra le prime cose da togliere.

Il confronto

La tabella mette in fila quello che conta per un sito italiano: cosa vede chi compila, dove vanno i dati, quanto costa, se sul login rispetta il criterio 3.3.8 e con quale plugin arriva su WordPress. I costi sono quelli del 25 settembre 2026, le installazioni quelle dichiarate da WordPress.org lo stesso giorno.

ServizioCosa vede chi compilaDove vanno i datiCostoSul login (WCAG 3.3.8)Su WordPress
reCAPTCHA v3NienteGoogle (Google Cloud Fraud Defense)Gratis fino a 10.000 verifiche al mese per organizzazione, poi 8 $ al mese fino a 100.000Nessun testAdvanced Google reCAPTCHA (200.000+), CAPTCHA 4WP (100.000+), integrato in Contact Form 7, add-on di Gravity Forms
Cloudflare TurnstileDi solito niente, a volte una casellaCloudflareGratis, verifiche illimitate, 20 widget per accountNessun testSimple CAPTCHA with Cloudflare Turnstile (200.000+), integrato in Contact Form 7
hCaptcha, piano gratuitoUna casella, a volte immagini da riconoscereIntuition Machines (Stati Uniti)Gratis; la modalità passiva parte dal Pro, 99 $ al meseAmmesso ad AA, escluso ad AAAhCaptcha for WP (80.000+)
Friendly CaptchaUn riquadro che si completa da soloFriendly Captcha (Germania)Da 9 € al mese per 1.000 richiesteNessun testFriendly Captcha for WordPress (10.000+)
ALTCHAUn widget senza prove da risolvereIl tuo serverGratis, licenza MITNessun testPlugin da GitHub (chiuso su WordPress.org), Admin and Site Enhancements Pro
Honeypot e filtri antispamNienteIl tuo server; con Akismet, AutomatticGratis; Akismet solo per i blog personaliNon stanno sul loginAntispam Bee (700.000+), WP Armour (400.000+), Akismet (5.000.000+)

“Nessun test” vuol dire che il sistema non chiede di risolvere niente. Il widget resta comunque un elemento della pagina, e come ogni elemento va raggiunto con la tastiera e annunciato da uno screen reader; le dichiarazioni dei produttori sull’accessibilità si verificano sulla pagina vera, con lo stesso metodo del resto del sito.

Per scegliere il servizio bastano le prime quattro colonne. L’ultima porta alla domanda che conta di più, perché due siti con lo stesso servizio e plugin diversi non sono protetti allo stesso modo.

Dove si aggancia il plugin, e cosa succede se il servizio non risponde

La seconda tabella riassume le prove sui cinque plugin, tutti configurati su login e commenti e con le altre impostazioni lasciate come arrivano.

PluginDove controllaRispetto alla passwordXML-RPCSe il servizio non rispondeCommenti via REST
Simple CAPTCHA with Cloudflare Turnstile 1.43.2authenticate, priorità 21DopoLa lascia passareBlocca; un’opzione lascia passare o ripiega su reCAPTCHANon li vede
CAPTCHA 4WP 7.6.2authenticate, priorità 999DopoLa lascia passareBloccaNon li vede
Advanced Google reCAPTCHA 5.40authenticate, priorità 9999DopoRespinge gli accessiBloccaNon li vede
hCaptcha for WP 5.3.0wp_authenticate_userPrimaLa lascia passareBloccaNon li vede
Friendly Captcha for WordPress 1.18.0wp_authenticate_user, priorità 20PrimaRespinge gli accessiLascia passareNon li vede

“Prima” vale per i nomi utente che esistono. Con un nome inesistente WordPress risponde con il suo errore prima che il plugin entri in gioco, come succede senza plugin. Il plugin di Turnstile, che arriva dopo, quando il token manca sostituisce il messaggio di WordPress con il suo, e chi prova non capisce se il nome esiste.

La colonna su XML-RPC va letta insieme al sito. Respingere tutti gli accessi da XML-RPC fa un favore a chi non la usa, e a chi la usa ferma le app e i client di pubblicazione che si collegano lì con nome utente e password; in quel caso la scelta di chiuderla spetta a te, non al plugin del CAPTCHA.

Bloccare o lasciar passare ha due costi diversi. Chi blocca protegge anche quando il servizio è giù, e in quel momento non fa entrare nessuno, amministratore compreso. Chi lascia passare non chiude fuori nessuno e per quel tempo non protegge niente. Friendly Captcha ha scelto la seconda strada, e reCAPTCHA la sceglie dal lato di Google quando si supera la quota. Il plugin di Turnstile blocca, e ha un’opzione di riserva che, se Cloudflare non risponde, lascia passare o mostra reCAPTCHA al suo posto.

Se un plugin che blocca ti chiude fuori, si rientra dal server, rinominando la sua cartella in wp-content/plugins oppure con wp plugin deactivate seguito dal nome del plugin, se hai WP-CLI. È la stessa strada di quando è il limite ai tentativi a chiuderti fuori.

Come scegliere, modulo per modulo

Login. Il CAPTCHA viene dopo il limite ai tentativi e il secondo fattore, perché copre una porta sola. Se lo metti, meglio un sistema che non chiede niente (Turnstile, reCAPTCHA v3, Friendly Captcha, ALTCHA) con un plugin che controlli prima della password, e XML-RPC va chiuso a parte se non lo usi. Contro i tentativi distribuiti su molti indirizzi un limite per IP serve poco, mentre un controllo sul modulo, che non guarda l’indirizzo, copre il buco.

Registrazione e password dimenticata. Lo stesso sistema del login, perché sono i due moduli che dicono se un account esiste. Nei plugin hanno una casella a sé, e vanno accese tutte e due.

Negozio. Il login e la registrazione di “Il mio account” di WooCommerce passano da wp_signon(), la quarta porta del login, e nei plugin sono una casella a parte. Tutti e cinque i plugin hanno un’integrazione con WooCommerce, e va accesa insieme a quella del login.

Commenti. Prima le impostazioni della discussione, poi un honeypot o un filtro come Antispam Bee o Akismet, e il CAPTCHA solo se lo spam passa lo stesso. Se il tema invia i commenti dalla REST API, la terza prova della sezione successiva dice se sono aperti a tutti, e in quel caso nessun plugin CAPTCHA li controlla.

Moduli di contatto. Conviene usare quello che il plugin dei moduli integra già. Contact Form 7 (6.1.7) ha reCAPTCHA v3, Turnstile, Akismet e Really Simple CAPTCHA, e con reCAPTCHA considera spam gli invii con punteggio fino a 0,5. Gravity Forms, con il suo add-on per reCAPTCHA, non respinge gli invii fino alla soglia ma li segna come spam, e da lì si possono recuperare.

Vincoli su dati e accessibilità. Se i dati non devono lasciare l’Europa, Friendly Captcha nel piano con i data center dedicati, oppure ALTCHA sul tuo server. Se non devono lasciare il server, ALTCHA, un honeypot o Antispam Bee. Se sul login devi rispettare il livello AAA delle WCAG, niente immagini da riconoscere.

Come verificare che funzioni

Il pannello del plugin dice cosa hai acceso, e per sapere cosa succede bisogna guardare da fuori.

Bastano tre prove da terminale, su un utente di prova con pochi permessi e senza secondo fattore. Nelle prime righe vanno l’indirizzo del sito e le credenziali di prova.

SITO="https://tuosito.it"
UTENTE="utente-di-prova"
PASSWORD_GIUSTA="la-password-di-prova"

# 1. Login senza token, con la password sbagliata e con quella giusta.
#    Tutte e due le volte deve rispondere il CAPTCHA. Risposta vuota: sei entrato.
for CASO in sbagliata giusta; do
  if [ "$CASO" = giusta ]; then PWD="$PASSWORD_GIUSTA"; else PWD="password-sbagliata"; fi
  printf 'password %s: ' "$CASO"
  curl -s -b 'wordpress_test_cookie=WP%20Cookie%20check' \
    --data-urlencode "log=$UTENTE" --data-urlencode "pwd=$PWD" \
    -d 'wp-submit=Accedi&testcookie=1' "$SITO/wp-login.php" \
    | tr -d '\n' | grep -o '<div id="login_error"[^>]*>.*' | sed -e 's#</div>.*##' -e 's/<[^>]*>//g' | tr -d '\n'
  echo
done

# 2. XML-RPC, che il CAPTCHA non vede. Un messaggio sulla password vuol dire porta aperta.
curl -s "$SITO/xmlrpc.php" -H 'Content-Type: text/xml' \
  --data "<?xml version=\"1.0\"?><methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>$UTENTE</value></param><param><value>password-sbagliata</value></param></params></methodCall>" \
  | grep -o '<string>[^<]*</string>' | head -1

# 3. Commenti dalla REST API, senza crearne nessuno (l'articolo 0 non esiste):
#    rest_comment_login_required = chiusi agli anonimi, rest_comment_invalid_post_id = aperti.
curl -s -X POST "$SITO/wp-json/wp/v2/comments" -H 'Content-Type: application/json' \
  -d '{"post":0,"content":"verifica"}' | grep -o '"code":"[^"]*"'

Nella prima prova deve comparire due volte il messaggio del CAPTCHA. Se con la password sbagliata compare l’errore di WordPress sulla password, il tentativo è arrivato alla password senza che il CAPTCHA lo fermasse, e un bot può continuare a provarne altre; se con la password giusta la risposta è vuota, l’utente di prova è entrato senza nessun CAPTCHA. La seconda prova dice se xmlrpc.php accetta tentativi di accesso, e un messaggio sulla password vuol dire di sì. La terza dice se i commenti via REST sono aperti agli anonimi, senza crearne nessuno, perché l’articolo con ID 0 non esiste.

Se la prova mostra un problema, la correzione spesso sta nelle impostazioni. Alcuni plugin chiedono cosa fare quando nel modulo manca il campo del CAPTCHA, e la risposta giusta è rifiutare l’invio. Se l’impostazione non c’è e il CAPTCHA viene controllato solo dopo una password giusta, conviene cambiare plugin.

Due avvertenze. La prima prova conta come un tentativo fallito per il limite ai tentativi, quindi va fatta da un indirizzo che sai sbloccare. Se poi l’indirizzo di login del sito è cambiato, va messo al posto di wp-login.php.

Su questo sito

Il modulo contatti di questo sito usa reCAPTCHA v3 attraverso l’add-on di Gravity Forms, versione 2.2.2. Con un punteggio fino alla soglia, 0,5 se non la si cambia, l’invio non viene respinto e finisce fra lo spam di Gravity Forms, da dove si può recuperare. La chiave è una di quelle passate d’ufficio a Google Cloud.

I commenti invece arrivano dalla REST API, perché li invia così il tema, e nessuno dei cinque plugin provati li vedrebbe; il messaggio di conferma del tema avvisa che ogni commento viene revisionato prima di comparire. Il login non ha un indirizzo pubblico, e wp-login.php rimanda a una pagina che non esiste, quindi qui le prove della sezione precedente vanno fatte sull’indirizzo vero.

Domande frequenti

Qual è la migliore alternativa a reCAPTCHA per WordPress?

Quella che si adatta a dove vuoi che vadano i dati e a quanto vuoi spendere. Cloudflare Turnstile è gratuito, di solito non chiede niente al visitatore e non richiede che il sito passi da Cloudflare. Friendly Captcha è europeo e a pagamento, da 9 euro al mese, e nel piano Advanced tiene i dati solo in Europa. ALTCHA gira sul tuo server ed è gratuito, e il suo plugin per WordPress oggi si scarica da GitHub. Per i soli commenti spesso bastano un honeypot o un filtro come Antispam Bee. In tutti i casi, oltre al servizio, conta il plugin che lo collega al sito.

reCAPTCHA è ancora gratuito?

Fino a 10.000 verifiche al mese per organizzazione, contando insieme tutti i siti e tutte le chiavi della stessa organizzazione su Google Cloud (dato del 25 settembre 2026). Oltre quella soglia serve la fatturazione, e da 10.001 a 100.000 verifiche il costo è di 8 dollari al mese, poi 1 dollaro ogni 1.000. Senza fatturazione, le verifiche fatte con il metodo SiteVerify, quello dei plugin WordPress che chiedono una chiave segreta, passano tutte con punteggio 0,9 fino al mese successivo.

Cloudflare Turnstile si può usare gratis su un sito aziendale?

Cloudflare indica il piano gratuito anche per le piccole e medie imprese e per la maggior parte dei siti in produzione, con verifiche illimitate e fino a 20 widget per account. Il piano Enterprise, a pagamento, serve per esigenze come più di 10 domini per widget, la rimozione del marchio di Cloudflare o statistiche più lunghe di 7 giorni. Il sito non deve passare dalla rete di Cloudflare per usare Turnstile.

Un CAPTCHA protegge anche XML-RPC e la REST API?

Il CAPTCHA sta sui moduli, e XML-RPC e la REST API non ne hanno. Nelle prove su cinque plugin, tre lasciano passare gli accessi da XML-RPC come se il CAPTCHA non ci fosse, e due li respingono tutti, anche con la password giusta, bloccando anche le app che li usano. Le password applicazione della REST API non passano da nessun modulo. Se XML-RPC non ti serve conviene chiuderlo, e i tentativi sulla REST API li vede solo un limite che conta anche quelli fatti con le password applicazione.

I CAPTCHA rispettano le WCAG?

Sul login il criterio 3.3.8 delle WCAG 2.2, livello AA, vieta i test cognitivi senza un metodo alternativo, quindi niente lettere da trascrivere, somme o puzzle. Ammette il riconoscimento di oggetti, come scegliere le immagini con un’auto, che però non supera il livello AAA, dove il criterio 3.3.9 lo esclude. I sistemi che non chiedono niente, come reCAPTCHA v3, Turnstile in modalità non interattiva, Friendly Captcha e ALTCHA, non presentano nessun test. Su tutte le pagine vale anche il criterio 1.1.1, che per i CAPTCHA chiede un testo che ne spieghi lo scopo e almeno una forma alternativa per un altro senso.

Serve un CAPTCHA sui commenti?

Conviene partire da quello che WordPress ha già: il blocco dei commenti ripetuti a meno di 15 secondi dallo stesso indirizzo, la moderazione dei commenti con due o più link e l’approvazione manuale. Poi un honeypot o un filtro come Antispam Bee o Akismet. Il CAPTCHA serve se lo spam passa lo stesso. Se il tema invia i commenti dalla REST API, i plugin CAPTCHA non li controllano, e conviene verificarlo prima di contarci.

Da qui in avanti

Un CAPTCHA è un pezzo della protezione del login, e il più facile da sopravvalutare. Copre una porta, dipende da un servizio esterno e da come il plugin lo collega. Il servizio si sceglie su dati, costo e accessibilità, il plugin su dove controlla e su cosa fa quando il servizio non risponde. Le tre prove vanno rifatte a ogni aggiornamento del plugin e a ogni cambio di servizio, insieme agli altri controlli del piano di manutenzione del sito. Se cambi servizio, rifalle il giorno stesso, perché con il plugin cambiano anche i campi e i messaggi. Anche il plugin, del resto, può cambiare mano: nel 2017 uno che si chiamava semplicemente Captcha, con oltre 300.000 installazioni, passò a un nuovo proprietario e con un aggiornamento distribuì una backdoor, uno dei casi raccontati negli attacchi alla catena di fornitura dei plugin WordPress.

Se preferisci che lo faccia io

Scegliere il sistema anti-bot, collegarlo ai moduli giusti e verificarlo da fuori fa parte dell’hardening dei siti WordPress che faccio per i clienti. Se vuoi che me ne occupi io, scrivimi quali moduli ha il sito e che servizio usi oggi.

Indice dei contenuti

  • Cosa è cambiato in reCAPTCHA fra il 2024 e il 2026
  • Cosa controlla un CAPTCHA in WordPress, e cosa no
  • Le alternative, per come funzionano
  • Il confronto
  • Dove si aggancia il plugin, e cosa succede se il servizio non risponde
  • Come scegliere, modulo per modulo
  • Come verificare che funzioni
  • Su questo sito
  • Domande frequenti
  • Da qui in avanti
  • Se preferisci che lo faccia io

Tag in Evidenza

CAPTCHAHardeningLoginSicurezza WordPress

Condividi


Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Alessandro Aili - WordPress Developer Alessandro Aili - WordPress Developer
Sono un WordPress developer che affronta tutte le tue sfide online.
Skills
  • Sviluppo di Siti Web Personalizzati
  • Ottimizzazione delle Prestazioni
  • Sicurezza del Sito Web
  • Aggiornamenti e Manutenzione
  • Sviluppo di Temi e Plugin Personalizzati
  • Migrazione e Trasferimento del Sito
© Copyright 2026 Alessandro Aili
  • Mappa del sito
  • Privacy Policy
  • Cookie Policy
  • Preferenze cookie
Alessandro Aili - WordPress Developer