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

    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 ming
    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