BigThink

WordPress e SPAM: quando Akismet non basta

Stop Spam

Inizia oggi una nuova miniserie del buon Camu, impegnato in una lotta contro lo spam.

Qualche settimana fa ho subito un’ondata massiccia di spam sul mio blog, come mai m’era capitato.

Intendiamoci, il mio blog si colloca nella parte bassa della coda lunga, non ho milioni di visitatori al giorno, e quindi anche gli spammer in genere mi lasciano in pace. Ma un giorno ho notato una lentezza sospetta nel caricare le pagine, ed in effetti ho scoperto, grazie al plug-in Akismet che uso sul mio sito per tenere a bada i cattivi, che in una settimana avevo ricevuto qualcosa come 12.000 commenti (o meglio tentativi di commenti) che il buon guardiano Akismet aveva prontamente bloccato.

In effetti neppure uno di questi messaggi fastidiosi era riuscito a farla franca, il che mi ha confermato la bontà di questo plug-in. Ma il problema era un altro: il picco eccessivo di visite in un breve lasso di tempo, ha fatto scattare i “vigili urbani” di Tophost, il provider che mi ospita. Per evitare proprio questo genere di attacchi, i loro sistemisti hanno infatti messo in piedi un sistema di QoS (Quality of Service).

Per farla semplice funziona così: ogni tot secondi hai un massimo numero di richieste effettuabili al database su cui si poggia il sito, sforato quel numero viene restituito un errore. Insomma, long story short direbbero gli americani: Akismet era stato efficace, ma non aveva eliminato il problema alla radice.

Pur filtrando egregiamente i messaggi spazzatura, il suo lavoro aveva consumato risorse di sistema, attivando buona parte degli ingranaggi di WordPress che si mettono in moto quando viene postato un nuovo commento. Volevo qualcosa di più efficace, e così mi sono messo a pensare ad una soluzione.

Ecco l’idea: bloccare gli indirizzi IP da cui provengono le richieste di spam a livello di server web, ancora prima che l’interprete PHP venga invocato. In altre parole, anziché far entrare il brutto ceffo e poi farlo sbattere fuori da Akismet dopo che questo ha sgranocchiato un po’ di risorse del sistema, bisogna  proprio chiudergli la porta in faccia. In fondo il server web chiede sempre a tutti i visitatori (in maniera trasparente) un po’ di informazioni su chi sono e da dove vengono.

Il sistema funziona dunque così:

  • C’è una lista nera, dove si tiene traccia degli indirizzi IP sospetti.
  • La prima volta che un malintenzionato lascia un commento di spam, Akismet lo pizzica e lo sbatte fuori.
  • A questo punto, un suo assistente (il plug-in che scriveremo in questa miniserie), prende nota del suo indirizzo IP, scrivendolo in un file accessibile al server web (noto come .htaccess).
  • Il server verrà quindi istruito (sempre tramite .htaccess) in modo da non far entrare tutti quelli che sono in questa lista nera. Così la prossima volta che il brutto ceffo bussa alla porta del server web, questo non gli aprirà, senza neanche disturbare Akismet.

Oggi, per cominciare, vedremo uno dei tanti modi per dire al server web di bloccare l’accesso ad un determinato indirizzo IP. Nel seguito presupporremo che il tuo server sia Apache, sebbene altri prodotti abbiano funzionalità analoghe.

Il file .htaccess si trova in genere nella cartella principale del sito: un documento di testo contenente una serie di istruzioni (dette anche direttive), raggruppate in base al contesto in cui si applicano.

Se ad esempio voglio che il server faccia qualcosa ogni volta che qualcuno accede al file index.php, scriverò

<Files index.php>
# Qui metto le istruzioni
</Files>

La flessibilità di Apache consente anche di raggruppare anche cose più complesse, tipo “tutti i file che finiscono in .php”, ma eviterò di dilungarmi in tali dettagli, in questo contesto. Ti basti sapere che, giocando opportunamente con le espressioni regolari, puoi davvero creare ogni genere di filtri.

Un’altra cosa che possiamo fare è creare una variabile al verificarsi di una condizione. In pratica quello che voglio fare è: se l’indirizzo IP del visitatore è nella lista nera, me lo ricordo (impostando una variabile a 1) per poterlo bloccare:

<Files index.php>
# Il cancelletto all'inizio rappresenta un commento
Order Allow,Deny
Allow from all
Deny from env=bruttoceffo
</Files>

SetEnvIf Remote_Addr "^123\.123\.123\.123$" bruttoceffo=1

La sintassi è un po’ astrusa, ma comprensibile. La lista nera sarà dunque un elenco di questi SetEnvIf, che il nostro plug-in aggiungerà opportunamente al file .htaccess ogni volta che Akismet pizzicherà uno di questi furfanti.

Nella prossima puntata vederemo come creare il plugin che modifichi il file .htaccess in modo automatico.

La miniserie continua:


Autore: Camu di DueChiacchiere

Leggi anche...

WordPress: creare una sezione di post in Evidenza

WordPress: creare una sezione di post in Evidenza

Vi è mai capitato di scrivere un ottimo articolo e vederlo sparire nel tempo, senza alcuna visita o commento? Esistono varie tecniche per dare visibilità ai post più vecchi del nostro blog, che normalmente non verrebbero più letti, e portargli nuovamente visite. Possiamo usare plugin come Related Post with Thumb per mostrare gli articoli ...
Escludere una categoria da tutte le sezioni di WordPress

Escludere una categoria da tutte le sezioni di WordPress

Tempo fa abbiamo visto come escludere i post di una certa categoria dalla Home del nostro blog WordPress. E se volessimo escludere una categoria da ogni sezione del blog? Dalla home, dal feed RSS, dalla ricerca, dagli archivi... Se siamo pigri, ci viene incontro il plugin Advanced Category Excluder, ma se invece siamo più smanettoni ...
WordPress: eliminare i contenuti duplicati con i Canonical link

WordPress: eliminare i contenuti duplicati con i Canonical link

Dalla versione 2.7 di WordPress è stata introdotta la paginazione dei commenti: quando un articolo ha più di un certo numero di commenti, questi verranno suddivisi su più pagine. Se avete attivato questa funzionalità sul vostro blog, si crea però un buon numero di contenuti duplicati, perchè avremo sia la pagina principale con l'articolo ...
Usare l'editor di WordPress all'interno dei nostri plugin

Usare l’editor di WordPress all’interno dei nostri plugin

Dopo lunghe ricerche e moltissimi test, ho finalmente trovato il modo di inserire l'editor di WordPress all'interno dei plugin creati da me. Immaginate di sviluppare un plugin WordPress, nelle cui opzioni avete una textarea dove l'utente deve poter scrivere del testo formattato. Come prima idea potrebbe venirvi in mente di utilizzare TinyMCE ed incorporare ...
WordPress tip: 10 funzioni per gestire gli utenti

WordPress tip: 10 funzioni per gestire gli utenti

Torniamo a parlare di come personalizzare WordPress e vediamo in particolare le funzioni relative agli utenti, non tutte documentate dal Codex. Chi è solito creare temi o plugin per WordPress può spesso aver bisogno di gestire i dati degli utenti, i permessi ed i loro ruoli. Vediamo allora delle situazioni comuni e come possiamo ...

15 Commenti

  1. Completamente d’accordo, informazioni eccellente, continuate così grande.

    17 dicembre 2010, 17:44
  2. Non ho capito niente :-( forse sono sul post sbagliato! Ho appena installato Akismet ma non ho capito che altro devo fare, devo attivarlo? Ok già fatto. Ma poi devo fare altro?

    27 aprile 2010, 19:43
  3. Dunque, un piccolo aggiornamento sul mio plugin. Pare che, come nella migliore tradizione in questi casi, sia stato applicato il famoso modo di dire “fatta la legge, trovato l’inganno”. In effetti il mio scudo protettivo ha (almeno) un tallone d’achille, che comunque richiede un minimo di sforzo per essere messo in pratica: il fatto che il cattivo di turno si presenti con le sue vere credenziali. Ho appena scoperto infatti che alcuni di questi usano mascherare il proprio indirizzo vero e presentarsi come provenienti da Google. Quello che succede è che Akismet li pizzica lo stesso, ma in lista nera ci finisce un indirizzo appartenente agli spider di Google, che quindi non sarà più in grado di indicizzare il sito, e vi butterà fuori dalla SERP. Io me ne sono accorto tramite Google Webmaster Tools, quando l’altro giorno ho visto una sfilza di 403 tra gli errori del crawler. Suggerimenti su come contrattaccare?

    22 ottobre 2009, 19:07
  4. @Emanuele: li verifico a mano rimouvendoli poi dalla lista nera. Come dirò nella seconda puntata della miniserie, il plugin è molto semplice e non include nessuna funzionalità avanzata di gestione, ma con un po’ di buona volontà quelle funzioni possono di certo essere aggiunte. Magari creando una lista “grigia”, in cui le righe sono commentate e possono essere attivate manualmente… D’altro canto, questo plugin nasce come prova concettuale di quello che si può fare ;)

    15 ottobre 2009, 19:17
  5. Come gestisci i falsi positivi? Sono quelli che mi preoccupano maggiormente. Li trascuri in favore dei grossi numeri? Oppure c’è una lista temporanea di IP da verificare?
    Ciao,
    Emanuele

    15 ottobre 2009, 17:02
    • In effetti mi sono chiesto anch’io la stessa cosa ^^

      15 ottobre 2009, 18:46
  6. Che bell’idea! Veramente bella!!!
    Leggerò sicuramente il prossimo articolo.

    Provo a indovinare :-) … Per caso hai intezione di inserire un paio di righe in Akismet per far modificare il file .htaccess quando rileva lo spam?

    14 ottobre 2009, 14:58
    • Ci sei andato vicino. Quella soluzione sarebbe più spartana e poi dovresti rifare il lavoro ogni volta che aggiornano Akismet. Quella che vi proporrò io invece è più elegante e di certo adatta anche ai meno smanettoni.

      14 ottobre 2009, 16:02
  7. Ottimo post
    circa un mese fa ebbi nel giro di poche ore una ventina di commenti di spam che akismet non mi blocco. Quando li segnalai come spam il db del blog si danneggiò…..
    Una giornata per rimettere tutto a posto :(

    14 ottobre 2009, 14:39
  8. @Ghido, si anche io la penso come te sull’essere meno pesante e più divertente, ma qualcuno potrebbe non essere d’accordo :-) Ad ogni modo, è sempre un approccio che mette curiosità a chi ha voglia di scoprire nuovi trucchi…

    14 ottobre 2009, 14:37
    • E’ scritto in maniera ottimale per chi lavora online e vuole che il suo articolo sia “appiccicoso” e che il lettore lo legga fino alla fine…
      Complimenti ;)

      15 ottobre 2009, 19:08
  9. Molto interessante questo articolo, aspetto con ansia le prossime puntate anche perchè qualche mese fa ho avuto anche io il tuo stesso problema sul mio blog che non ha un numero così elevato di visite da far pensare che interessi ai spammer ma evidentemente, evidentemente però non era così.

    14 ottobre 2009, 14:30
  10. Beh, ora che lo rileggo mi sembra una storiella per bambini più che un post tecnico, spero che nessuno se l’abbia a male se ho voluto usare questo “stile” narrativo :)

    14 ottobre 2009, 12:14
    • Tipo il lupo cattivo che bussa alla porta del nostro server, poi soffia e lo butta giù? :P

      Scherzi a parte, raccontato così è più divertente da leggere e meno pesante ;)

      14 ottobre 2009, 12:56
  11. ottimo post!

    14 ottobre 2009, 11:04

7 Citazioni