Entro il 2025, il panorama digitale è cambiato: CAPTCHA non è più il custode affidabile che era una volta. Mentre i bot guidati dall'AI risolvono i puzzle CAPTCHA con un'accuratezza quasi perfetta, gli utenti autentici sono lasciati frustrati e spesso abbandonano i siti quando vengono sfidati. Studi recenti mostrano che i bot ora superano i CAPTCHA basati su immagini e testi nel 96-100% dei casi—superando di gran lunga i tassi di successo umani reali e riducendo le conversioni dei moduli fino al 20%. Ma il problema va molto più in profondità di qualsiasi puzzle obsoleto.
Oggi, il traffico automatizzato domina il web. Me ne rendo conto personalmente. Nel 2024, si stimava che quasi la metà di tutte le attività online fosse generata da bot, con fino al 37% classificato come apertamente dannoso. Anche i siti con mitigazione attiva segnalano ancora il 10-20% di attività bot in corso. La realtà è dura: soluzioni tradizionali come CAPTCHA e liste nere IP sono diventate quasi impotenti di fronte a botnet coordinate e in rapida evoluzione che possono imitare utenti reali, cambiare IP freschi, e persino sfruttare dispositivi mobili per attacchi su larga scala.
Per i proprietari di siti web e le aziende online, l'impatto è devastante. Le inondazioni di bot possono paralizzare le risorse del server, rallentare i caricamenti delle pagine fino a farle strisciare e rovinare l'esperienza utente. Ma gli effetti si propagano ulteriormente—le classifiche di Google scendono mentre le prestazioni delle pagine crollano, i ricavi pubblicitari evaporano mentre la qualità del traffico diminuisce, e le relazioni con i partner pubblicitari si inaspriscono quando le visite false inondano le loro analisi.
Ho vissuto questa crisi in prima persona. Tutto è iniziato con un'accusa da parte di un'agenzia pubblicitaria: hanno affermato che il 90% del traffico del mio sito fosse falso. Il loro codice di tracciamento, incorporato per la consegna degli annunci, ha rivelato volumi di bot che stavano sopraffacendo non solo i loro filtri ma anche il mio server. Stiamo parlando di oltre un milione di visite di bot al giorno—traffico invisibile a Google Analytics ma catastrofico dietro le quinte. Quelli che inizialmente credevo fossero utenti genuini erano, in realtà, parte di un'ondata incessante di colpi automatizzati, che inondavano la mia infrastruttura e minacciavano la fattibilità di tutto il mio progetto.
Questa non è solo una storia di cattivi attori che sfruttano le debolezze—si tratta di come l'architettura stessa del web moderno sia sotto assedio. Le ottimizzazioni del codice e gli aggiornamenti del server non erano sufficienti. La sfida è diventata una corsa agli armamenti, con il mio sito preso nel fuoco incrociato. Ecco come si è svolta l'inondazione di bot, quasi distruggendo tutto ciò che avevo costruito—e i passi che ho intrapreso per combatterla.
La mia storia di traffico bot: da 3 milioni di visite a mezzo milione
Tutto è iniziato con un'agenzia pubblicitaria che mi ha accusato di avere il 90% di traffico falso, l'ho già detto ma: avevano inserito un codice di tracciamento sul mio sito per fornire annunci pubblicitari, e il volume di bot era un problema anche per loro—superava i loro filtri e gonfiava il carico del server. Stiamo parlando di oltre un milione di visite di bot al giorno.
All'inizio, ero indignato. Su Google Analytics, vedevo 100.000 visite giornaliere pure. Pensavo fossero utenti reali. Ma la loro preoccupazione riguardava il traffico al di fuori di Analytics. Quello strato invisibile di visite stava causando scompiglio nel carico del server. All'epoca, il mio progetto era in esecuzione su Laravel 5.3 ospitato su hosting condiviso, e credevo che il collo di bottiglia delle prestazioni fosse il vecchio codice. Ho riscritto tutto in Laravel 10 con un'ottimizzazione eccellente, inclusa l'analisi giornaliera di milioni di record di database.
Tuttavia, ancora rallentava. Il mio hosting condiviso non poteva gestirlo. I caricamenti delle pagine erano lenti, e il traffico reale è diminuito—mese dopo mese, perdevo circa 150.000 visite. Da 3 milioni di visite mensili, alla fine ho perso più della metà.
Avevo aggiornato a un potente VPS con 16 core CPU e 32GB di RAM, aspettandomi che questo risolvesse tutto. Ma anche con l'infrastruttura migliorata e il backend Laravel 10 ricodificato, il problema persisteva. In realtà, le cose peggiorarono—i bot divennero più aggressivi, aumentando il volume e la frequenza degli attacchi. È diventato chiaro che nessuna quantità di ottimizzazione del codice o scalabilità dell'hardware poteva risolvere un problema che era fondamentalmente legato a un traffico bot incontrollato e dannoso.
Ma non era tutto. Approfondendo, mi sono reso conto che la scala era ancora più grande: oltre 2 milioni di crawl del sito al giorno, separati da circa 1,5 milioni di visite di bot al giorno. Eppure, la parte monetizzabile e tracciabile del sito (quella che interessava alle agenzie) portava solo 100.000 impressioni al giorno. È lì che il problema è esploso. Stavo lavorando con un'agenzia pubblicitaria che si affidava a traffico pulito e umano. Dovevano trovare modi per filtrare velocemente i bot, o i loro sistemi di analisi e la distribuzione degli annunci sarebbero stati sopraffatti. Le accuse, il sovraccarico dell'infrastruttura e le discrepanze nei ricavi—erano tutti legati a questo invisibile e incessante flusso di bot.
La mia prima mossa è stata creare un CAPTCHA personalizzato, cercando di mostrare ai bot una pagina vuota mentre gli utenti reali passavano. Purtroppo, questo si è ritorto contro. I bot dannosi non hanno rallentato—hanno aumentato il carico. Il CAPTCHA è diventato una sfida che hanno cercato aggressivamente di superare, raddoppiando il carico.
Poi è arrivato il blocco di massa tramite .htaccess. Ha funzionato—per alcuni giorni. Poi le reti di bot si sono adattate, sono comparsi nuovi IP, e .htaccess è diventato gonfio e lento. Il mio provider di hosting è intervenuto, aiutandomi a bloccare temporaneamente intere sottoreti, ma il problema si è ripresentato settimanalmente.
Infine, sono passato a Cloudflare. Questo è stato il cambiamento più impattante. Anche se non perfetto, mi ha permesso di filtrare oltre 1,5 milioni di richieste di bot in 24 ore. Ho caricato blocchi di rete direttamente nel loro firewall. Il risultato? Da 1,5 milioni di visite di bot, solo 20 sfide CAPTCHA venivano attivate giornalmente—prova che il rilevamento edge di Cloudflare funzionava meglio di qualsiasi altra cosa che avessi provato.
Per stare un passo avanti ai bot, ho costruito il mio sistema di logging interno. Registra ogni singola richiesta per indirizzo IP e stringa User-Agent, memorizzandole in un database. Dietro le quinte, un'attività programmata viene eseguita ogni minuto per aggregare i dati. Quando rileva attività sospette—come un grande volume di richieste provenienti da una singola rete o intervallo di IP—attiva una notifica email automatica. Quella email include un elenco di IP e sottoreti pronti per essere aggiunti a Cloudflare per il blocco.
Sono ancora sul piano gratuito di Cloudflare, ma anche questo fornisce abbastanza controllo per implementare regole firewall manuali. Questo approccio proattivo mi permette di rilevare e rispondere alle inondazioni di bot prima che sopraffacciano il sistema. A livello Apache, inizialmente ho provato a utilizzare .htaccess per bloccare il traffico direttamente, ma questo metodo aveva rendimenti decrescenti. Man mano che aumentavano le regole, le prestazioni del sito peggioravano, rendendo chiaro che il blocco a livello di server non era sostenibile senza un CDN o supporto a livello edge.
Come creare un sistema di login + Protezione CloudFlare?
Perché non limitazione della velocità o blocco geografico? Perché non funzionano nel mio caso. La maggior parte di questi bot fa solo una richiesta per IP—ma lo fanno utilizzando centinaia o addirittura migliaia di IP all'interno della stessa rete. Ciò significa che limitare la velocità per IP non aiuta molto; il volume è distribuito, non concentrato. E per quanto riguarda il rilevamento tramite User-Agent? Inutile. Alcuni bot sono abbastanza intelligenti da imitare Googlebot o altri crawler legittimi, quindi non ci si può fidare solo delle intestazioni. Che dire del filtro della posizione geografica? Anche questo non è efficace. Il mio sito è multilingue e riceve traffico da molti paesi per design. Queste reti di flood lo sanno e ruotano gli IP da tutto il mondo. Forse mi stanno raschiando perché il mio sito ha contenuti di valore—ma non posso semplicemente bloccarli dietro un muro di registrazione. Ciò rovinerebbe l'esperienza utente. Quindi avevo bisogno di qualcosa di più intelligente delle soluzioni usuali.
Guarda il mio codice, le query MYSQL e le raccomandazioni di seguito. (Laravel 10 + MYSQL)