Oggi per gli spammers è sempre più difficile trovare un relay aperto, ed anche i pochi esistenti sono quasi sempre inseriti nelle black list… Tuttavia esistono sempre nuove
prospettive per chi si ingegna, specialmente quando l’ingenuità  altrui apre dei comodi varchi.

Stiamo parlando dei form per l’invio delle mail che migliaia di programmatori PHP improvvisati
(e non solo quelli) hanno disseminato in rete senza applicare un’adeguata validazione dell’input dell’utente e che si stanno rivelando una vera manna per i professionisti dello spamming.

Tutti gli sviluppatori sanno di doversi difendere dalle SQL injections… Meno nota è la possibilità  di injections negli headers delle mail: il problema
è conosciuto da anni ma è diventato emergenza negli ultimi mesi, cioè da quando gli spammers hanno
iniziato a sfruttare abbondantemente questa vulnerabilità : tutto parte da una caratteristica (possiamo chiamarlo bug?) della funzione mail() di PHP.

Descrizione della funzione mail

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )

I primi tre parametri non hanno bisogno di spiegazioni, il terzo parametro invece è una specie di calderone in cui infilare tutto cià che non è destinatario, oggetto della mail o corpo del messaggio, quindi ad esempio il mittente o tutti gli headers aggiuntivi per inviare una mime mail.

Qui arrivano i dolori perché se non si va a verificare che cosa
effettivamente l’utente inserisce nel “calderone” abbiamo automaticamente aperto le porte ad una possibile injection di headers come ad esempio la stringa:

\nBCC:indirizzo@daspammare1.it,indirizzo@daspammare2.com….”

E tutto questo avviene attraverso informazioni apparentemente innocue come il mittente (From:).

Chi ha sempre fatto le cose come si deve non deve allarmarsi… per gli altri ecco
in sistesi le regole da seguire per evitare il problema.

  • Utilizzate sempre la validazione lato server: verificare i dati in Javascript va bene solo per comodità  del navigatore, ma dobbiamo sempre effettuare anche in PHP gli
    opportuni controlli sull’input dell’utente. Ricordiamo che è possibile effettuare il submit di un form via script e vanificare ogni controllo lato client, ed è appunto questa la tecnica utilizzata dagli spammers.
  • Lato server verifichiamo sempre che la mail inserita per il mittente sia un indirizzo
    valido
    e che in generale quando l’input dell’utente finisce nel quarto parametro della funzione mail() non contenga a-capo (\n, \r\n) o stringhe troppo lunghe. Attenzione ai campi hidden del form… non sono affatto nascosti agli occhi di chi spamma.
  • Non utilizzare form mail PHP scaricandoli dalla rete se non si è in grado di comprenderne il codice PHP: non si può sapere se l’autore ha preso le precauzioni necessarie

In caso contrario è quasi sicuro che nel giro di poco tempo lo script per l’invio della mail dal form sarà  preso di mira e verrà  utilizzato per inviare spam. Infatti, esistono robots specializzati nell’analizzare i siti realizzati in PHP e scovare pagine vulnerabili.

La conseguenza
più probabile per i siti che diventano inconsapevolmente dei relay è quella di far inserire l’ip del server in una black list e quindi rendere impossibile l’invio di mail agli utenti che di quella macchina si servono.

Di seguito alcuni link presso cui trovare esempi di codice corretto (ma ci vuole davvero poco), in ogni caso consiglio una ricerca in Google con la keyword [PHP Mail Header Injection]

Email Header Injections in PHP
Email Header Injection Exploit
Email Injection (Secure PHP)

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
13 CommentiDi' la tua

Il tuo indirizzo email non sarà mostrato pubblicamente. I campi obbligatori sono contrassegnati da *

Prova

Alessandro
Alessandro

Salve sono Marco (diverso da quello di prima) e ho un problema....ho creato un guestbook su un sito e, come di consueto sono stato assalito da spam, tanto che il guestbook non é piu utilizzabile. Il mio guestbook é il php, con DB e mi appoggio a mysql. Non ho molta esperienza ma grazie ad internet sono riuscito a creare un file php che mi blocca gli ip......adesso il mio problema é che non so come vedere gli ip di chi mi lascia il messaggio,come devo fare? Qualcuno sa aiutarmi? Grazie

Marco
Marco

come si può fare per leggere l'ip dei commenti su un blog di blogspot (www.blogger.com) ? grazie kruger

Kruger Agostinelli
Kruger Agostinelli

salve sono marco..sapete dirmi come faccio a leggere gli headers della mail (io uso firefox)...devo vedere l'indirizzo ip di un tipo che continua a madarmi mail e nn so chi sia.

marco
marco

Non so se si é capito ma il problema in questione é diverso dal semplice ***fastidio*** di ricevere SPAM via mail o sul proprio blog: un form vulnerabile alle mail injection diventa ***sorgente di SPAM*** verso la rete e la cosa può comportare l'inserimento dell'intero IP del server in una black list

Seos
Seos

Consiglio Spam Karma come plugin per Wordpress per fermare lo spamming dei commenti

Andrea Paiola
Andrea Paiola

ci proverò,anche perché mi sembra restrittivo imporre l'autenticazione per inserire commenti in un blog. grazie saluti

Alberto
Alberto

@Alberto Potresti provare ad utilizzare le API di Askimet per bloccare questo tipo di commenti.

Epper
Epper

La cosa incredibile che ho notato su uno dei siti che sto sviluppando é che ho iniziato a ricevere spam all'interno del blog da me realizzato. "Persone" che inserivano tantissimi link che si moltiplicavano a vista d'occhio ogni giorno. L'unico modo, momentaneamente, per ovviare a questo problema é stato quello di far autenticare l'utente prima di permettergli l'inserimento di un nuovo commento. saluti

Alberto
Alberto

Se e' solo per il genuine sappi che si puo' rimuovere. Basta che cerchi si google. Ciao

Grab
Grab