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 trick: inserire un testo predefinito alla fine dei post

WordPress trick: inserire un testo predefinito alla fine dei post

Una funzionalità che può spesso tornare utile sul vostro blog WordPress è quella di inserire un testo alla fine di alcuni post, in modo automatico. Ad esempio, una buona idea per incrementare i nostri guadagni può essere quella di inserire una breve frase, con tanto di link al programma di affiliazione, sotto tutti i ...
Come creare una Newsletter con WordPress e FeedBurner

Come creare una Newsletter con WordPress e FeedBurner

Esistono tantissimi servizi di Newsletter e Mailing List, la maggior parte dei quali è a pagamento o ha dei limiti. Tra le possibilità gratuite, è bene evitare i plugin per WordPress che girano in locale, in quanto richiedono troppe risorse per inviare le email e non sono molto affidabili. Una buona soluzione free è quella ...
Usare TinyMCE come editor dei nostri plugin WordPress

Usare TinyMCE come editor dei nostri plugin WordPress

Settimana scorsa vi ho spiegato come inserire l'editor di WordPress nei vostri plugin, tuttavia dopo svariati test, ho trovato alcuni limiti nello script che vi ho proposto: la parte di HTML non funziona; è compatibile solo con le ultime versioni di WordPress; non è possibile inserire più di un editor nella stessa pagina. Alla luce di questi ...
WordPress: aggiungere un testo alla fine del feed RSS

WordPress: aggiungere un testo alla fine del feed RSS

Tempo fa ho spiegato come inserire un testo predefinito alla fine dei post, dal quale è venuto fuori anche un plugin: Add2post. Oggi vorrei fare una cosa analoga, ma con i feed RSS: vedremo quindi come inserire automaticamente un testo predefinito alla fine di ogni elemento del nostro feed, senza l'utilizzo di alcun plugin. Un ...
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 ...

22 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ù? 😛

      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