SEO spam WordPress: trovare link nascosti di casinò e farmaci
SEO spam su WordPress: come trovare link nascosti di casinò e farmaci, vedere ciò che vede Googlebot, pulire database e file e richiedere il riesame a Google.
Anche in: English Deutsch Français Español Polski Português Türkçe
Se Google mostra per il vostro dominio risultati inattesi su casinò, farmaci o in giapponese, mentre il sito nel browser appare normale, è il momento di indagare su un caso di SEO spam su WordPress. I risultati possono indicare una compromissione ancora attiva oppure spam rimasto nell'indice dopo la pulizia. Lo spam è nascosto nel markup, oppure viene mostrato solo a Google e a chi arriva dalla ricerca. Questa guida spiega come vedere il sito come lo vede Google, dove si annida lo spam e come toglierlo dall'indice.
Che aspetto ha lo SEO spam su WordPress e perché non lo vedete
Non lo vedete perché non è pensato per voi. Chi attacca vuole la reputazione del vostro dominio, non l'attenzione dei vostri visitatori. Il codice iniettato spesso salta gli utenti autenticati e chi digita direttamente l'indirizzo.
Le forme più comuni sono tre:
- Hacklink. Link a siti di casinò, farmaci o prestiti vengono iniettati nelle pagine. Di solito stanno dentro un blocco
display:none, sono posizionati fuori dallo schermo o finiscono in un footer che nessuno legge. - Japanese keyword hack. Migliaia di pagine generate automaticamente, con testo giapponese e link a negozi. Spesso arrivano con una sitemap propria, così Google le trova subito.
- Redirect condizionali e cloaking. Il codice controlla user agent, indirizzo IP o referrer. A Googlebot serve contenuto di spam. Chi arriva da Google viene reindirizzato. Voi vedete la pagina normale.
Il danno è reale anche se non lo vedete. Le posizioni possono calare, i visitatori perdono fiducia e Google può impiegare risorse di scansione sulle pagine di spam invece che su quelle vere. Se non siete ancora sicuri di essere stati compromessi, partite dai nostri 12 segnali che un sito WordPress è stato hackerato.
Vedere il sito come lo vede Google
Cominciate da Google stesso. Cercate site:example.com e scorrete i risultati, poi restringete la ricerca:
site:example.com casino
site:example.com viagra OR cialis
site:example.com 激安
site:example.com inurl:.html
Risultati in una lingua in cui non pubblicate, o schemi di URL che il vostro sito non usa, sono un indizio forte.
Un controllo utile in più è lo strumento Controllo URL di Google Search Console. Incollate un URL sospetto (o la home page), fate clic su Testa URL attivo e poi su Visualizza pagina testata. La scheda HTML mostra il markup ricevuto dal crawler di Google, lo screenshot mostra ciò che ha renderizzato. Cercate in quell'HTML casino, href o display:none. Il test live usa il crawler di ispezione di Google, che chi attacca può trattare in modo diverso dal crawler di indicizzazione. Può quindi rivelare il cloaking, ma un risultato pulito non lo esclude.
Un confronto approssimativo si può fare dal proprio computer con curl:
curl -s https://example.com/ -o normal.html
curl -s -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com/ -o googlebot.html
diff normal.html googlebot.html
curl -sS -D - -o /dev/null -e "https://www.google.com/" https://example.com/
L'ultimo comando esegue una richiesta GET con referrer Google e stampa gli header della risposta. Un header Location: può rivelare un redirect HTTP, ma il comando non intercetta i redirect JavaScript e non riproduce ogni sessione del browser. C'è un ulteriore limite: se il codice iniettato controlla gli intervalli di IP di Google, curl dal vostro portatile vedrà una pagina pulita. Un risultato pulito di curl non significa che il sito sia pulito.
Infine aprite Indicizzazione > Pagine in Search Console. Un aumento improvviso degli URL indicizzati o rilevati che non avete pubblicato indica di solito pagine di spam generate.
Dove si nasconde lo SEO spam in WordPress
Prima di indagare, conservate un backup di file e database. Proteggetelo, perché può contenere dati personali e segreti. Meglio una copia isolata, con accesso di rete limitato, e i comandi qui sotto vanno eseguiti dalla root di WordPress di quella copia: molti comandi WP-CLI caricano WordPress e possono eseguire codice compromesso. Aggiungere --skip-plugins --skip-themes riduce il rischio, ma i mu-plugin e un wp-config.php modificato vengono comunque eseguiti. Se non potete isolare la copia in modo sicuro, affidate l'analisi al vostro hosting provider o a un esperto di incident response.
Nel database
wp db search 'casino' --all-tables
wp db search 'viagra' --all-tables
wp post list --post_type=any --post_status=any --orderby=date --order=DESC --fields=ID,post_type,post_status,post_date,post_title
wp option list --search='widget_*'
wp option list --search='theme_mods_*'
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Controllate articoli e post meta alla ricerca di link che non avete scritto, e cercate articoli o pagine recenti con titoli o stati anomali. In wp_options guardate:
- i widget di testo e HTML
- i theme mods, dove spesso si trova il codice personalizzato del footer
- le opzioni con autoload dai nomi che non riconoscete
I nomi di tabella con wp_ presuppongono il prefisso predefinito; se il vostro è diverso, verificate $table_prefix in wp-config.php. Amministratori sconosciuti sono già di per sé un riscontro grave.
Nei file
wp core verify-checksums
wp plugin verify-checksums --all
ls -la wp-content/mu-plugins
find wp-content/uploads -type f \( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
find . -type f -name "*.php" -mtime -14
grep -rnE "base64_decode|gzinflate|str_rot13|eval\(" wp-content --include=*.php
wp core verify-checksums confronta i file del core con quelli di WordPress.org. wp plugin verify-checksums --all funziona solo per i plugin ospitati su WordPress.org. Per i plugin premium, procuratevi una copia nuova dal fornitore e confrontate con quella.
Il grep sui marcatori di offuscamento produrrà falsi positivi, perché anche plugin legittimi usano alcune di queste funzioni. Cercate stringhe codificate molto lunghe e codice privo di senso nel suo contesto.
Controllate a mano anche questi punti:
functions.php,header.phpefooter.phpdel tema- cartelle di plugin che non avete installato (chi attacca ama i nomi plausibili)
wp-config.phpeindex.php, per righeincludeaggiuntive.htaccess, per regoleRewriteCondsuHTTP_USER_AGENToHTTP_REFERER- la root web, per file XML di sitemap e file di verifica
google*.htmlche non avete creato
| Forma di spam | Nascondigli abituali |
|---|---|
| Hacklink | Footer del tema, widget, theme mods, contenuto degli articoli |
| Japanese keyword hack | File generati, sitemap non autorizzata, falso plugin, .htaccess |
| Cloaking e redirect | functions.php, mu-plugin, .htaccess, index.php |
Cercare in Search Console le tracce dell'attaccante
Gli attaccanti spesso si verificano come proprietari della vostra proprietà in Search Console. Poi inviano le proprie sitemap perché Google indicizzi lo spam più in fretta. Finché mantengono quell'accesso, possono continuare a inviare URL.
Aprite Impostazioni > Utenti e autorizzazioni e rimuovete ogni proprietario o utente che non conoscete. Poi rimuovete anche il relativo metodo di verifica. Può essere un file google*.html nella root web, un meta tag nel tema o nelle impostazioni dell'header, oppure un record DNS TXT. Se saltate questo passaggio, possono semplicemente verificarsi di nuovo.
In Indicizzazione > Sitemap esaminate gli invii sconosciuti: potrebbero averli inviati plugin legittimi o altri gestori autorizzati del sito. Rimuovete da Search Console le sitemap inviate dall'attaccante e rimuovete o disattivate la loro fonte sul sito. Poi aprite Sicurezza e azioni manuali e leggete sia il rapporto Problemi di sicurezza sia il rapporto Azioni manuali. Gli URL di esempio elencati vi dicono quale spam ha trovato Google e fanno da pratica lista di controllo per la pulizia.
Pulire lo spam, poi chiudere la via d'accesso
Eliminare i link visibili è solo cosmesi. Se il punto d'ingresso resta aperto, lo spam di solito ritorna, spesso nel giro di pochi giorni.
- Se non l'avete ancora fatto, salvate lo stato infetto (file e database) e conservatelo come prova.
- Rimuovete dal database articoli, opzioni, widget e utenti di spam.
- Sostituite i file modificati di core, plugin e tema con copie nuove da fonti affidabili. Non correggete i file infetti riga per riga.
- Individuate il punto d'ingresso. I più comuni sono un plugin vulnerabile o nulled, una password di amministratore rubata, oppure credenziali FTP o di hosting trapelate.
- Risolvete il problema, poi cambiate tutte le password e i salt in
wp-config.php.
Il nostro piano di rimozione del malware da WordPress descrive la procedura completa. I plugin WordPress vulnerabili spiegano la via d'accesso più frequente.
La stessa falla può aver esposto anche dati dei clienti, come le voci dei moduli o gli account utente. In tal caso possono scattare gli obblighi del GDPR in caso di violazione dei dati personali; vedere la notifica di violazione GDPR entro 72 ore.
Togliere lo spam da Google: 410, rimozioni e richiesta di riesame
Quando le pagine generate di solo spam non esistono più, i loro URL devono restituire 404 (Not Found) o 410 (Gone); vanno bene entrambi. Se sono state modificate pagine legittime, ripristinatele invece di rimuoverne gli URL. Non reindirizzate gli URL di spam alla home page: Google può considerarli soft 404 e continuare a scansionarli.
Se gli URL di spam seguono uno schema che nessuna delle vostre pagine reali usa, potete rispondere con 410 a livello di server:
RedirectMatch 410 "^/spam-pattern/"
location ~ ^/spam-pattern/ { return 410; }
Nei casi urgenti, ad esempio se lo spam compare con il nome del vostro marchio, usate lo strumento Rimozioni di Search Console. Nasconde gli URL dai risultati solo in modo temporaneo e non è un metodo di rimozione definitivo. Fate in modo che gli URL di solo spam continuino a restituire 404/410 e lasciate che Google scansioni quelle risposte; non bloccateli in robots.txt, perché Google deve vedere lo stato di rimozione. Consultate le indicazioni di Google sullo strumento Rimozioni. Inviate di nuovo la sitemap autentica, così Google riscansiona le pagine che contano.
La necessità di un riesame dipende dai rapporti:
- Se il rapporto Problemi di sicurezza o Azioni manuali segnala un problema non risolto, usate la relativa opzione di riesame dopo aver corretto tutte le pagine interessate. La richiesta deve essere breve e fattuale: che cosa avete trovato, che cosa avete rimosso, come è entrato l'attaccante e che cosa avete cambiato per chiudere quella falla.
- Se nessuno dei due rapporti segnala problemi, non c'è alcun riesame da richiedere. Occorre che Google riscansioni il sito ripulito.
Mantenete aspettative realistiche. I riesami richiedono tempo, gli URL di spam escono dall'indice gradualmente e le posizioni possono recuperare lentamente o non del tutto. Nessuno può promettere una tempistica.
Individuare per tempo la prossima iniezione
Lo SEO spam è progettato per passare inosservato, quindi servono controlli che non dipendano dall'osservare la pagina:
- Mantenete una baseline dell'integrità dei file e verificate ogni modifica che non avete fatto voi.
- Eseguite una ricerca
site:sul vostro dominio una volta al mese. - Attivate le notifiche e-mail in Search Console, in modo che problemi di sicurezza e azioni manuali vi raggiungano.
- Scansionate regolarmente il database in cerca di schemi di link come quelli descritti sopra.
- Trattate come un incidente ogni nuovo account amministratore che non avete creato voi.
Il plugin Security Audit & Compliance di secaudit.eu cerca SEO spam e hacklink nascosti, spam nel database, amministratori nascosti e altri indicatori di compromissione. Confronta inoltre i file con una baseline. Rileva e segnala: non pulisce il sito in automatico e il punto d'ingresso deve comunque essere chiuso da una persona. → secaudit.eu
FAQ
Perché non vedo lo spam quando visito il mio sito?
È il codice iniettato a decidere chi vede cosa. Di solito esclude gli utenti autenticati e controlla user agent, indirizzo IP e referrer. Alcuni attacchi prendono di mira Googlebot o i visitatori che arrivano dalla ricerca; altri mostrano lo spam anche ai visitatori comuni o nascondono i link in un markup servito a tutti. Usate il test live di Controllo URL come una delle verifiche, ma ricordate che chi attacca può servire al suo crawler di ispezione contenuti diversi da quelli del crawler di indicizzazione.
Google penalizzerà il mio sito in modo permanente?
Non ci sono garanzie in nessuno dei due sensi. Pulite a fondo, chiudete il punto d'ingresso e rimuovete l'accesso dell'attaccante in Search Console. Richiedete il riesame se un rapporto Problemi di sicurezza o Azioni manuali lo prevede. Il recupero dipende poi dalla riscansione del sito da parte di Google, che richiede tempo.
Un plugin di sicurezza basta a eliminare lo SEO spam?
Un plugin può aiutare a trovare lo spam e i file modificati. Rimuovere lo spam in modo pulito e scoprire come è entrato l'attaccante richiede lavoro manuale o un aiuto professionale. Altrimenti lo spam tende a ritornare.
Controlla il tuo sito
Security Audit & Compliance è il plugin WordPress di secaudit.eu: cerca malware, spam nascosto, file core modificati e codice vulnerabile, e collega i risultati all’art. 32 del GDPR, all’art. 21 della NIS2 e alla OWASP Top 10.
Scopri cosa controlla il plugin