I pubblicatori automatici: il problema
Dopo esserci occupati nell'articolo precedente degli spambot delle mail, trattiamo in questo articolo, suddiviso in due sezioni, degli spambot dei messaggi. I formmail sono mediamente strutture ad inserimento aperto come i guestbook o i blog. Quando parlo di strutture ad inserimento aperto intendo dire che per utilizzare tali strumenti (o parte di tali strumenti) non è necessario eseguire una registrazione ed un login, cioè che chiunque può utilizzarli.
Qualche
anno fa erano molto utilizzati i
guestbook, magari associati ad un sito web statico. Questi strumenti
permettevano
agli utenti del sito di lasciare un commento generale. Con il passare
del tempo
questo genere di interazione è andata scemando a favore di
un’interazione più
generalizzata e comunque della facilità con cui è
possibile oggi creare siti a
contenuti dinamici. L’esempio più eclatante
è rappresentato bene dai blog.
Essenzialmente tale forma di pubblicazione dei contenuti non
è altro che un
sistema di gestione delle news abbinato ad un gestore dei commenti da
parte
degli utenti: ovviamente con il tempo
l’interattività è cresciuta e i gestori
di blog hanno aggiunto caratteristiche sempre maggiori ma
fondamentalmente un
blog è quello.
E
proprio la natura libera dei commenti sul
web ha aperto una miniera inesauribile agli spammer. Infatti se da un
lato ogni
fruitore dei nostri contenuti - per quanto occasionale possa essere -
può
vedere pubblicato il proprio commento in tempo reale,
dall’altro lato apre la
strada allo spam.
Benchè
l’unica soluzione efficace al 100% sia
rappresentata dalla moderazione umana per la quale i messaggi vengono
pubblicati solo dopo che un operatore li ha vagliati ed approvati
è possibile
evitare o ridurre questo lavoro noioso e/o molto gravoso (basti pensare
che un
blog famoso può collezionare qualche centinaio di commenti
per post in poche
ore).
I pubblicatori
automatici: le soluzioni
Per
alleggerire il lavoro del moderatore umano
esistono dunque due tipi di soluzione complementari: barriere antispam
pre-immissione e filtri post-immissione. Mentre le prime cercano di
opporre
delle difficoltà concrete all’invio del
messaggio in modo che soltanto
operatori umani siano in grado di attuarlo, le seconde eseguono un
controllo
sul messaggio stesso per evitare che messaggi indesiderati siano
pubblicati.
L’uso contemporaneo di sistemi di entrambi i tipi –
eventualmente associati ad
una moderazione manuale – consentono di ottenere ottimi
risultati in termini di
blocco dello spam.
All’incirca
i sistemi antispam a disposizione
sono questi:
Pre-immissione
- Registrazione degli utenti
- Utilizzo di tecnologie complicate da implementare
- Captcha con immagini o flash (eventualmente associati a riconoscimento)
- Operazioni sulle stringhe
- Test cognitivi ogrammaticali (eventualmente associati a riconoscimento)
Post-immissione
- Controllo della data del messaggio commentato
- Filtro blacklist degli ip
- Lista parole bannate
- Filtri bayesiani ad autoapprendimento
Personalmente consiglio di associare ad un controllo post-immissione un po’ di moderazione umana magari su digest dei commenti per evitare falsi positivi.
Registrazione degli utenti
La
soluzione che subito salta all’occhio per
evitare lo spam in un sistema a commento libero consiste nel rendere il
sistema
chiuso. Questa soluzione porta con sè l’evidente
limitazione
dell’interattività. Consiglio di mettere a
disposizione la registrazione degli
utenti per i fruitori abituali del proprio blog ma non richiederla come
obbligatoria: in questo modo gli utenti abituali potranno commentare
grazie a
sistemi di cookie a riconoscimento e non saranno sottoposti a controlli
frustranti
per stabilire ogni volta se l’utente è umano
oppure è un bot; al tempo stesso
sarà possibile mantenere il commento libero con altri filtri.
Utilizzo di tecnologie
complicate da implementare
Un’altra
soluzione possibile al problema
consiste nel rendere la vita difficile allo spambot facendolo desistere
dall’attaccare il vostro sito. In sostanza questo consiste
nell’inserire
tecnologie per cui l’implementazione in uno spambot sia
più complicata
dell’esecuzione di una richiesta POST al vostro server. Non
fermerete gli
spambot per sempre ma solo finché la tecnologia che usate
come filtro non sarà
abbastanza diffusa da spingere il programmatore dello spambot ad
implementarla
per continuare ad inviare i propri messaggi indesiderati.
Altro
punto a sfavore: difficilmente
l’utilizzo di tecnologie particolari riesce ad evitare di
scontrarsi contro
linee guida sull’accessibilità: ad esempio
pretendere che l’utente abbia
javascript attivato (e da questo riconoscere se sia umano o bot)
è in contrasto
con le linee guida sull’accessibilità del w3c e
della legge Stanca.
Dall’altro
lato questi controlli non sono per
niente invasivi per un utente finale che utilizza un browser
“standard”, cioè
per la quasi totalità degli utenti legittimi.
Controlli
di questo tipo possono essere ad
esempio impostare la reale destinazione di un form solo tramite
javascript;
impostare un cookie nella pagina in cui viene presentato il form e
controllarne
il valore nella pagina di destinazione del form. È possibile
sfruttare questo
periodo di euforia per AJAX per eseguire gli invii di materiale solo in
tale
modo: difficilmente uno spambot oggi sarà in grado di
gestire tale soluzione.
Captcha
Probabilmente
vi sarete già trovati nella
situazione di dover riempire un form inserendo poi verso la fine un numero o una cifra resa di
difficile lettura
da distorsioni e ghirigori sullo sfondo: ecco, quello è un captcha.
Inizialmente
tale sistema era sì non
accessibile ai non vedenti ma almeno era funzionale: in
un’immagine era
presente una scritta lineare nero su bianco da copiare in una casella
di testo.
La soluzione era frustrante per l’utente ma almeno il compito
era semplice ed
era molto difficile sbagliare. Con il tempo si sono sviluppate
però delle
contromisure da parte degli spambot; con algoritmi complicati simili a
quelli
usati per l’OCR delle scansioni è possibile
infatti risalire al contenuto
testuale dell’immagine. I capctcha allora hanno iniziato a
rendere il testo
sempre più difficile da codificare con un algoritmo mettento
i caratteri sovrapposti,
posizionati in punti random della pagina, con sfondi disturbati, in
colori
diversi, deformati da piani curvati, con dimensioni diverse, con
disturbi in
primo piano.
Per
farvi un’idea di quale possa essere il
livello attuale dei captcha e quanto siano efficaci questi strumenti
nati per
contrastarli potete guardare la pagina web di uno di questi
programmi.
Non
bisogna essere un consulente in materia di
accessibilità per capire che questa soluzione non
è accessibile ed è oltretutto
di difficile utilizzo da parte di individui privi di disturbi visivi.
Grandi
network che utilizzano questo sistema
offrono come alternativa per i propri utenti con disturbi della vista
contatti
diretti con il proprio staff per garantire l’accesso
nonostante questa
barriera. È evidente come questo sistema per garantire
l’accessibilità non sia
alla portata di tutti i siti web.
Un’alternativa
più economica consiste
nell’offrire, come contenuto alternativo al captcha visuale,
lo spelling del
contenuto testuale. Tale soluzione richiede però un
sintetizzatore vocale
comandato da php (ad esempio è possibile interfacciarsi
alle Java
Speech API) oppure di una collezione di fonemi audio
registrati
nonchè di tecniche di montaggio audio oggi non disponibili
con php.
Presa
coscienza del fatto che questo sistema
non è facilmente accessibile avete due
possibilità nell’implementazione:
immagini o flash. Per fortuna in php esistono estensioni per entrambi i
formati
(le librerie GD e Ming) per cui risulta facile la creazione dinamica di
questi
contenuti.
Concretamente
è necessario assegnare nella
pagina del form un codice all’utente che provvederemo a
rappresentare sotto
forma di captcha. Per questo il sistema più semplice
consiste nell’utilizzare
le sessioni ma è possibile anche assegnare un codice
identificativo univoco
all’utente che lato server avremo associato con il contenuto
testuale del
captcha.
La
creazione vera e propria del captcha è
invece semplificata dalla presenza di numerose classi disponibili
online: sul
solo phpclasses.org è possibile infatti trovarne
tre, PHP
Captcha, OCR
Captcha e CAPTCHA.
Per
quanto riguarda la scelta del formato
flash vale quanto detto sulla diffusione: se utilizzate una soluzione
poco
diffusa, benchè meno sicura in assoluto, si
dimostrerà più sicura nella
pratica. I captcha in flash non sono molto diffusi, così che
gli spambot non se
li aspettino, per questo potete crearne di meno articolati. Ecco un
esempio
molto semplice generato con Ming.
<?php
$stringa = generaPass(10);
// la salvo in sessione o in database per un controllo successivo
$t = newSWFTextField(SWFTEXTFIELD_NOEDIT);
$t->addstring($stringa);
$m = new SWFMovie();
$m->add($t);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
Tenete
comunque presente il fatto che un
captcha in flash impone all’utente di avere installato un
ulteriore software.
Nella prossima puntata affronteremo altre tecniche per difenderci da questo problema.
Operazioni sulle stringhe
Abbiamo terminato la precedente parte di questo articolo
dedicato agli strumenti per difendersi dallo spam su messaggi di blog o altri strumenti di pubblicazione
automatica con un lungo paragrafo dedicato ai Captcha.
Continuiamo e terminiamo invece il nostro articolo parlando di altri utili strumenti per evitare che le nostre
applicazioni Web vengano assaltate da robot automatici: test cognitivi, controlli sulla data, filtri blacklist o
bayesiani.
È possibile creare un filtro di riconoscimento umano basato su semplici operazioni da far
eseguire all'utente; queste sono una versione semplificata dei giochi proposti da una rivista di enigmistica. Si
può chiedere all'utente di riportare in un campo di testo solo le lettere maiuscole o minuscole, solo i caratteri
in posizione pari o dispari, solo i numeri, e simili.
Il difetto maggiore riguarda sempre gli screen reader e il fatto che difficilmente verranno letti diversamente un
carattere in minuscolo e uno in maiuscolo.
Test cognitivi o grammaticali
Una caratteristica che sicuramente distingue un essere umano da un software è la capacità di
pensare: leggere una domanda ed elaborare una risposta sulla base di un ragionamento o di conoscenze
pregresse. Ecco che quindi si possono realizzare test cognitivi o di logica per discriminare un utente reale.
Rientrano in questa categoria:
- domande tautologiche (es. Di che colore era il cavallo bianco di Napoleone?)
- i test del tipo "trova l'intruso" (es. Cane, Gatto, Cavallo, Ferro da stiro, Canarino)
- trova la forma grammaticale (es. Trova l'aggettivo: "La bella bambola di pezza è di Anna")
- domande con risposta ovvia (es. Come si chiama la figura geometrica con tre lati?)
A tutti questi filtri è possibile associare dei controlli di riconoscimento (impostati ad esempio dopo tre volte
che si sono passati questi test) per evitare che utenti abituali siano costretti a sostenere continuamente queste
prove frustranti.
Controllo della data del messaggio commentato
Dopo aver implementato delle barriere per impedire agli spambot di fornire contenuti indesiderati attraverso il
vostro sito web sarà necessario prendere provvedimenti per agire direttamente sul testo del messaggio per
distinguere quelli legittimi dagli altri.
Il più semplice di questi controlli consiste nell'evitare la pubblicazione diretta dei commenti a messaggi
risalenti a più di un certo numero di mesi prima, soluzione attuabile con un blog. L'importante è dichiarare
chiaramente questa politica del sito e rendere disponibile un moderatore umano per pubblicare eventuali falsi
positivi.
Filtro blacklist degli Ip
Uno dei sistemi più vecchi per riconoscere uno spammer ed impedirgli di riempirci con contenuti non richiesti
consiste nell'elaborare una blacklist di Ip. In pratica è necessario registrare insieme ai
commenti gli indirizzi Ip e compilare un elenco di quelli che vengono utilizzati per inviare messaggi di spam. A
questi indirizzi impediremo poi di accedere alle funzioni di commento sui nostri spazi web.
Queste liste che un tempo erano molto utilizzate sono andate in disuso per un motivo abbastanza semplice: gli
indirizzi Ip non corrispondo a determinati individui ma vengono condivisi tra vari utenti di un determinato
provider. Per questo motivo un utente legittimo si ritrova impossibilitato ad utilizzare una parte del nostro
sito web solo perchè in un determinato momento si trova ad utilizzare l'Ip usato in passato da uno spammer.
Questa situazione può essere molto frequente in particolari settori (basti pensare al caso Fastweb con più utenti
che si presentano contemporaneamente all'esterno con lo stesso indirizzo Ip).
Lista parole bannate
Una soluzione più raffinata consiste nell'utilizzare una blacklist ma non di indirizzi Ip ma di
termini. Gli spammer infatti si specializzano in determinati settori e utilizzano spesso le
stesse parole o gli stessi url. Queste liste saranno quindi composte da un elenco di url pubblicizzati dallo spam
e da termini spesso presenti in questi messaggi come ad esempio "casino", "sesso", "viagra", "cialis", "sex" e
così via.
Il problema maggiore che deriva da questa tecnica consiste nel tenere aggiornata la lista dei termini già che gli
spammer troveranno facilmente il modo di aggirarla (ad esempio inserendo "cia1is" al posto di "cialis"). Inoltre
in determinati settori è possibile avere un alto numero di falsi positivi per determinati termini che possono
rientrare nell'uso legittimo del sito web.
Filtri bayesiani ad autoapprendimento
Nel 1763 dopo la morte di Thomas Bayes viene pubblicato un articolo illustrante quello che è oggi conosciuto come
il teorema di Bayes. Questo teorema
negli ultimi anni è diventata la base dei più efficaci filtri antispam in circolazione. Questi
filtri si basano, semplificando, su elenchi di termini con le relative probabilità di essere contenuti in
messaggi di spam e in messaggi legittimi. In base a queste probabilità è possibile quindi calcolare con relativa
certezza se un certo messaggio sia spam o no semplicemente analizzandone il contenuto.
Un esempio di implementazione è dato da PHP Naive Bayesian Filter, una serie di classi da interfacciare con un database MySQL.
Alternativamente è possibile interfacciarsi al celebre script in perl Spamassassin via linea di comando.
I filtri bayesiani necessitano di un impegno massiccio nella prima fase della loro implementazione per via del
tirocinio da fare per farli funzionare correttamente. Dopo questa fase di apprendimento però i falsi positivi e i
contenuti di spam non filtrati tenderanno fortemente a zero.
Conclusioni
È difficile che uno spammer desideri espressamente i dati presenti sul vostro sito web. A tal proposito quanto
più il sistema che utilizzate per proteggere i vostri dati è personalizzato e non standard tanto più sarà sicuro.
Ma di contro, quanto più il vostro sistema sarà sicuro tanto più sarà preso a modello ed imitato. Questo circolo
vizioso porta inesorabilmente a continuare la sfida con gli spammer ad aggiungere nuove barriere e aggiornarne di
vecchie per impedire che vengano superate.