Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Proteggere i propri siti dagli spambot delle mail

Soluzioni in Php per proteggere le proprie applicazioni Web dagli spambot, gli strumenti automatici che navigano la rete alla ricerca di indirizzi e-mail da usare per l'invio di spam.
Soluzioni in Php per proteggere le proprie applicazioni Web dagli spambot, gli strumenti automatici che navigano la rete alla ricerca di indirizzi e-mail da usare per l'invio di spam.
Link copiato negli appunti

Da quando Internet ha iniziato ad essere uno strumento di
comunicazione
a livello globale la sua storia è sempre stata accompagnata
dallo spam. Le motivazioni sono molto semplici: spedire un messaggio
pubblicitario su Internet (attraverso mail, usenet, web) è
estremamente più economico che non farlo in forma cartacea.
La
stessa mail di spam può essere destinata a migliaia di
indirizzi
contemporaneamente impiegando pochi minuti e poche risorse e lo stesso
è possibile con messaggi sui newsgroup. Il lavoro
di uno spammer è reso ancora
più facile
dal
fatto che non deve neppure fare lo sforzo di inserire personalmente il
messaggio in un programma di posta elettronica o su un newsgroup o su
un blog: esistono gli spambot. Questi
sono programmi simili nel
funzionamento agli spider dei motori di ricerca che scandagliano la
rete indirizzo per indirizzo alla ricerca di un’informazione
utile, di uno spazio aperto attraverso il quale inviare il proprio spam.

Attualmente si possono riconoscere tre diversi tipi di spambot
secondo il loro obiettivo:

  • cercano indirizzi email in chiaro
  • cercano formmail mal scritti da
    sfruttare
  • cercano pubblicatori di contenuti sul
    web a libero accesso

Gli indirizzi email pubblici: il problema

Uno spambot che si mette alla
ricerca di indirizzi email da
aggiungere
a proprie liste cerca di sopperire alle mancanze di un equivalente
dell’elenco telefonico. Il funzionamento di uno spambot del
genere è molto elementare – ed infatti
appartengono a
questo tipo i primi spambot che hanno infestato la rete – e
svilupparne uno può richiedere meno di una giornata:
essenzialmente si tratta di spider che, data una lista di url,
scandagliano pagine web alla ricerca di

  • indirizzi email da aggiungere ad un
    indirizzario
  • url di altre pagine web da aggiungere
    alla lista delle pagine web da controllare

Gli indirizzi trovati sono quindi registrati e verificati
tramite varie
tecniche applicate all’invio del messaggio pubblicitario non
richiesto come ad esempio l’inserimento di un tag
“img” in un’email in formato html che
invece di
richiamare un’immagine richiami uno script con parametri
identificativi: in questo modo è possibile sapere chi ha
visionato un determinato messaggio email e quindi chi, presumibilmente,
ne aprirà altri. A tal proposito molti client di posta
permettono di bloccare la visualizzazione di immagini remote e
abilitano tale configurazione di default.

Un’altra tecnica per
verificare un indirizzario consiste
nell’inserire una possibilità per non ricevere
più
questi messaggi non richiesti. Seguire questa strada nella maggior
parte dei casi porta semplicemente ad essere riconosciuti come
indirizzi email validi e quindi a non liberarsi più dello
spam. Spesso e volentieri inoltre queste liste di indirizzi controllati
vengono vendute. Diventa quindi di importanza vitale mascherare gli
indirizzi email pubblicati in modo che siano fruibili da un visitatore
reale e non da uno spambot.

Gli indirizzi email pubblici: la soluzione

La soluzione più semplice in questo caso resta la
modifica 
dell’indirizzo email pubblicato senza un tag
“a”.
Tale tecnica è applicabile anche ai documenti non in formato
html come file di testo o documenti pdf ed è riscontrabile
sul
web già dai primi accessi ai newsgroup.

Si può modificare l’indirizzo email
seguendo due
strade diverse:

  • Rendendolo diverso da un indirizzo
    email. Ad
    esempio inserendo al posto di
    “indirizzo@dominio.it” la
    scritta “indirizzo [chiocciola] dominio [punto] it”
  • Rendendolo un indirizzo email
    plausibile dal punto
    di vista sintattico ma non da quello logico. Ad esempio
    “indirizzo.NOSPAM@dominio.it” oppure
    “indirizzo.TOGLIMI@dominio.it”

Benchè l’applicazione di queste soluzioni
in php
sia molto
semplice esse non sono più molto efficaci:
gli spambot in
quindici anni si sono attrezzati e sono in grado a volte di risalire
agli indirizzi reali. Inoltre queste soluzioni necessitano o di un
livello cognitivo e di attenzione abbastanza alti da parte del
visitatore per riconoscere le convenzioni implicitamente applicate,
oppure di un chiaro messaggio all’utente che non è
sempre
possibile fornire. Di contro questa è l’unica
soluzione
che garantisce l’accessibilità al sistema ad
individui
costretti ad utilizzare lettori vocali o browser senza supporto
javascript.

Infatti esistono alternative con una resa visuale migliore che
necessitano però di tecnologie che non garantiscono
l’accessibilità. Una di queste consiste nel
fornire
l’indirizzo email in maniera alternativa al testo con
un’immagine o un filmato flash.
Fortunatamente il php
è in
grado con le estensioni gd e ming di creare dinamicamente questo genere
di contenuti permettendoci così di rendere questi passaggi
più semplici.

È possibile ad esempio passare un intero testo ad
una
funzione
perché questa sostituisca tutti gli indirizzi email con tag
“img” che richiamino script php ad hoc con
parametri
identificati. E’ necessario usare l’accortezza di
specificare tale parametro perché non contenga
esplicitamente
l’indirizzo email per non rendere vana tutta la tecnica. Ad
esempio è possibile passare l’indirizzo email
codificato
con la funzione mycrypt_encrypt() e decodificarlo con la funzione
mycrypt_decrypt() oppure utilizzare soluzioni più semplici
come
la “codifica” di Cesare (traslare tutti i caratteri
avanti
o indietro di un certo numero di posizioni per ad esempio per far
diventare HAL la stringa IBM). In questo modo però saremo
riusciti a visualizzare
l’indirizzo email ma non a renderlo
“cliccabile”.

Per fornire questa funzionalità aggiuntiva possiamo
sfruttare le
potenzialità dei browser di riconoscere stringhe espresse in
formato esadecimale oppure qualche riga di codice javascript.

<?php

$mail = "chris@html.it";

$mail_js = "document.write('<a href="mailto:" . $mail .
"">" . $mail . "</a>')";

$mail_encrypted = "";

for( $i = 0; $i < strlen($mail_js); $i++ )

    $mail_encrypted .= "%" .
dechex(ord($mail_js{$i}));

echo "<script type="text/javascript">eval(unescape('" .
$mail_encrypted . "'));</script>";

?>

Il metodo più sicuro per affrontare il problema del
“grabbing” di indirizzi email rimane la
sostituzione degli
stessi con formmail magari generati dinamicamente. I problemi di questa
soluzione sono però la scarsa usabilità
– dato che
l’utente si aspetta che cliccando su un indirizzo email si
apra
il suo programma di posta elettronica – e la privazione
dell’utente del diritto di scegliere in che modo inviare il
proprio messaggio. Inoltre anche le formmail presentano dei problemi
non indifferenti dal
punto di vista dello spam.

I formmail: il problema

Anche l’introduzione dei formmail sul web risale
agli albori
ed
è tutt’ora molto utilizzato soprattutto nei siti
web
istituzionali di società. In origine esisteva uno script
sviluppato in Perl (il formmail.pl appunto) utilizzato in lungo ed in
largo, in seguito furono sviluppati script analoghi
in vari linguaggi.
Su hotscripts.com nella sezione php si contano più di 200
script
di questo tipo. La ragione di questa segmentazione è
individuabile nella facilità con cui in php si
può
sviluppare un formmail: si tratta essenzialmente di un form in cui si
permette all’utente di immetere qualche dato e una manciata
di
codice per raccogliere questi input ed passarli alla funzione mail.

Arriviamo in questo modo alla prima soglia di
sicurezza
da considerare:
la scelta della libertà da lasciare all’utente.
Una mail
infatti è essenzialmente composta da due parti principali:
il
destinatario e il contenuto del messaggio. Nel nostro formmail dovremmo
permettere all’utente di sceglierne solo uno, non entrambi.
In
questo modo si riesce a bloccare lo spammer più evidente,
quello
cioè che usa il nostro formmail per inviare la mail che
vuole a
chi vuole.

Evitato questo pericolo possiamo passare ad analizzare il
rischio che
si nasconde nei formmail e cioè la mail-injection. La
funzione
mail del php non si occupa di fare un parsing dei parametri passati e
si limita ad assemblare il messaggio con i dati che possiede. Questo
permette ad un utente malizioso di utilizzare il vostro form per
inviare spam cercando di sostituire il testo della vostra mail con le
proprie intestazioni (quindi anche i destinatari) e con il proprio
messaggio.

Così ad esempio una mail formattata dalla funzione
php come

HEADER VARI
From: Mittente
Subject: Titolo

Testo del messaggio
.

viene trasformata in un messaggio malizioso del tipo

HEADER VARI

From: Mittente

Subject: Titolo fittiziorn

Bcc: prima@mail.it; seconda@mail.it; terza@mail.it

Testo del messaggio legittimo.

.

per decidere i destinatari della mail oppure in questa per
scegliere il
testo da mostrare al destinatario!

HEADER VARI

From: Mittente

Subject: Titolo fittiziorn

Content-Type: multipart/mixed; boundary=lucertola;rn

--lucertolarn

Content-Type: text/htmlrn

rn

Messaggio di spam.rn

--lucertola--rn

Testo del messaggio legittimo.

.

È evidente come questa falla abbinata ad uno
spambot
consista in
una manna dal cielo per chi vuole inviare messaggi non richiesti senza
essere rintracciato e al tempo stesso vi esponga al rischio di essere
inseriti in una blacklist di spammer senza aver inviato un solo
messaggio non richiesto.

I formmail: la soluzione

Dobbiamo trovare un modo di filtrare gli utilizzi leciti del
nostro
formmail; fortunatamente le soluzioni sono molteplici e semplici da
applicare.

Modificare il quarto parametro della funzione mail

La funzione mail del php presenta un quarto parametro
opzionale con il
quale è possibile passare degli header aggiuntivi
personalizzati. Questi header vengono aggiunti in coda a quelli
già
impostati
esattamente come sono passati alla funzione: l’interprete php
non
si occupa di inserire i caratteri di rientro e di nuova linea. Da un
lato questa caratteristica ci consente una maggior
flessibilità nell’utilizzo della funzione, ma
dall’altro ci espone proprio al rischio evidenziato prima.

Un rimedio rapido consiste nell’aggiungere alla
stringa che
contiene i nostri header personalizzati la sequenza
“rnrn” che crea una linea vuota che nel formato
delle
email significa il passaggio dagli header al contenuto vero e proprio
della mail.

mail('mail@destinatario.it', 'Oggetto',
'Testo', 'Header
aggiuntivi'.<strong>"rnrn"</strong>);

Questa soluzione è efficace solamente per i
tentativi di
mail-injection tentati sul contenuto della mail. Purtroppo infatti non
ri rivela funzionale per i tentativi di utilizzo illecito di campi
header come il campo del mittente (molto spesso specificato) o come il
soggetto.

Filtrare i messaggi che tentano di inserire un carattere di
nuova linea

Una soluzione più efficace consiste
nell’evitare
l’invio di tutti i messaggi che comprendono al loro interno
la
stringa “n” o “r” in modo da
bloccare sul
nascere il tentativo di spam.

Utilizzare in alternativa alla funzione mail una classe

Invece di utilizzare direttamente la funzione mail che
effettua il
pacchettamento ed invio della mail “as it is”
è
possibile mediare la spedizione di un messaggio con una classe studiata
ad hoc. In questo modo sarà molto più semplice
applicare
eventuali filtri aggiuntivi a tutta la posta inviata dal vostro sito
web. È possibile così mettere in pratica le due
soluzioni
suggerite in precedenza modificando un singolo file. In alternativa
è possibile utilizzare una classe
già
diffusa come ad esempio phpmailer.

Già che siamo in argomento vorrei segnalare come evitare che
i
messaggi email legittimamente inviati dal vostro server
tramite php
vengano riconosciuti come spam (questo avviene regolarmente con grossi provider come ad esempio Libero.it). La soluzione, anche in questo caso semplice, consiste nello specificare nel quinto parametro della funzione mail (disponibile dalla versione 4.0.5) la stringa “-fmittente” ad esempio “-fchris@html.it”. Il quinto parametro della funzione mail permette di specificare parametri da passare al server smtp presente sulla macchina insieme al messaggio da inviare, quindi controllate accuratamente il contenuto di eventuali parametri passati provenienti dall’esterno. Da notare con attenzione che in caso di safe mode non sarà possibile specificare il quinto parametro e verrà generato un errore.

Ti consigliamo anche