Come nascondere un indirizzo e-mail agli spammer
Martedì 23 Febbraio 2010 - 08:32
di Andrea Ganduglia


Uno dei problemi più comuni dello sviluppo web è la pubblicazione degli indirizzi e-mail sulle pagine del sito. Pubblicare in chiaro il proprio indirizzo di posta elettronica quasi certamente lo farà cadere nelle mani di qualche spammer che, con altrettanta probabilità, ci inonderà di mail indesiderate.
D’altronde, non pubblicare la mail è spesso ugualmente dannoso: i metodi di contatto attraverso form o attraverso link non attivi o parzialmente attivi non sono altrettanto immediati e utili e non sempre si adattano al contesto.
Ho raccolto di seguito sei metodi che permettono di “nascondere” un indirizzo e-mail agli spammer, valutando per ciascuno alcune caratteristiche: leggibilità a video, attivazione del mailto, stampa, compabilità con i vari browser, efficacia della soluzione, usabilità.
Metodo 0. Il mondo perfetto
In un mondo perfetto sarebbe sufficiente:
<a href="mailto:user@domain.tld">user@domain.tld</a>
Si legge, attiva il mailto, si stampa e gode della massima portabilità. Purtroppo questo mondo non è perfetto :-( e questo metodo è praticamente inutilizzabile.
Metodo 1. Salvare la mail in una immagine
Un metodo popolare prevede di salvare l’indirizzo all’interno di una immagine. In questo modo, non essendoci testo, i crawler degli spammer non possono cercare nulla. Di fatto, però, questo metodo comporta del lavoro in più per creare l’immagine. Riassumendo:
- Video: sì.
- Stampa: solo se la stampa immagini è abilitata.
- Mailto: no. L’utente è costretto a copiare manualmente l’indirizzo.
- Compatibilità: ampia, ma difficile integrare lo stile.
- Efficacia: elevata.
- Usabilità: molto scarsa.
Metodo 2. Nascondere @ e .
Nascondere gli elementi essenziali della mail protegge dai crawler più diffusi; in alcuni ambiti poi, come la pubblicazione di file di testo è anche l’unica soluzione.
user[AT]domain[DOT]tld
In HTML si può optare per una versione leggermente più efficiente, che mostra a video l’indirizzo avvalendosi delle entità. Alcuni crawler convertono le entità in ASCII prima del parsing: in questo caso la soluzione è inutile.
user& #64;domain& #46;tld
- Video: sì.
- Stampa: sì.
- Mailto: solo nel secondo caso.
- Compatibilità: molto ampia.
- Efficacia: media.
- Usabilità: discreta (diffusione), buona nel secondo caso.
Metodo 3. Sostituire tutti i caratteri con le entità HTML
Figlia del metodo 2, questa soluzione converte l’intero indirizzo in entità avvalendosi di una semplice funzione PHP.
function ord_mail($email){
$o = Array();
foreach(str_split(trim($email)) as $v){
$o[] = "& #".ord($v).";";
} return implode('',$o);
}
echo ord_mail("user@domain.tld");
Ecco il risultato:
& #117;& #115;& #101;& #114;& #64;& #100;& #111;& #109;& #97;& #105;& #110;& #46;& #116;& #108;& #100;
- Video: sì.
- Stampa: sì.
- Mailto: sì.
- Compatibilità: molto ampia.
- Efficacia: buona.
- Usabilità: ottima.
Metodo 4. Offuscare con Javascript
Javascript è un ottimo strumento per manipolare il testo HTML, le soluzioni qui sotto offrono l’immediatezza e l’usabilità del testo in chiaro (metodo 0), elevata efficacia, ma richiedono Javascript attivo.
Questa funzione JS suddivide la stringa in varie parti e poi la assemblarla:
function split_mail(user, domain, tld) {
var mail;
mail += '<a href="' + 'ma' + 'il' + 'to:' + user;
mail += '& #64;' + domain '.' + tld;
mail += '">' user + '& #64;' + domain '.' + tld + '<' + '/a>';
document.write(mail);
}
split_mail('user','domain','tld');
Quest’altra invece, che è la mia preferita, usa l’indirizzo codificato in base64 (al codifica può avvenire lato server con PHP) e poi lo decodifica con un semplice classe al momento dell’uso:
var mail = Base64.decode("dXNlckBkb21haW4udGxkCg==");
document.write("<a href=\"mailto:"+mail+"\" class=\"mail\">"+mail+"</a>");
- Video: sì.
- Stampa: sì.
- Mailto: sì.
- Compatibilità: richiede Javascript, può eventualmente essere utilizzato il tag
<noscript>con il metodo 2. - Efficacia: elevata.
- Usabilità: ottima.
Metodo 5. Invertire la stringa con CSS
Questo è un metodo curioso: in pratica si scrive la mail al contrario e poi la si “raddrizza” per gli utenti via CSS:
<span style="unicode-bidi:bidi-override;direction:rtl;">dlt.niamod@resu</span>
- Video: sì.
- Stampa: sì.
- Mailto: no.
- Compatibilità: richiede CSS anche per la stampa.
- Efficacia: elevata.
- Usabilità: scarsa.
Metodo 6. Inserire dei commenti HTML nell’indirizzo
Può essere un metodo rapido alternativo alla prima soluzione del metodo 2:
user<!--nospam-->@domain<!--nospam-->.tld>
- Video: sì.
- Stampa: sì.
- Mailto: No.
- Compatibilità: Molto ampia.
- Efficacia: discreta.
- Usabilità: discreta.
Conclusioni
Come al solito, l’approccio “ci sono molti modi per farlo” ci lascia senza una soluzione definitiva, ma con un ventaglio di possibilità equivalenti da adattare al contesto in cui ci si trova, alle tecnologie impiegate e al gusto personale.
Voi quale preferite? E quale utilizzate?
Categoria: PHP e Open Source, Scripting | Permalink
Commenti
1
Ottime tecniche ma credo che una buona form possa coprire qualsiasi esigenza.
Un’altra tecnica è quella usata se non sbaglio da Facebook che crea dinamicamente un immagine che mostra l’indirizzo. Non è linkabile tramite mailto ma è comunque una possibile alternativa
2
Di solito utilizziamo il metodo 4 con JS però anche la soluzione PHP mi sembra interessante.
La proverò!
3
I link mailto andrebbero evitati quanto più possibile sui siti dei clienti. Espongono un dato sensibile ad un rischio di spam inutile e costringono ad un lavoro supplementare a livello di implementazione, senza contare che le tecnicne sopra esposte devono la loro efficacia al fatto che gli spambot non sono ancora così evoluti. Ma cosa accadrà quando evolveranno? Ho postato un video tratto da YouTube che mostra un’approccio passo passo all’invio mail tramite form. Si tratta di una soluzione adottata anche da siti come ibs.it (non fate caso alla rozzezza del video… non è mio!):
http://onwebdev.blogspot.com/2.....roach.html
Ovviamente se si tratta di un sito personale possiamo fare come ci pare. Io addirittura non ho filtrato niente, tanto ci pensa Gmail. ciao :-)
# - postato da Gabriele Romanato - 23 Febbraio 2010 - 11:10
4
Uso da tempo ormai il metodo 3, e mi trovo bene.
# - postato da Axiomatic.it - 23 Febbraio 2010 - 11:10
5
qualcuno di voi usa AJAX?
6
Io uso una variante del metodo Javascript. Ovvero l’indirizzo è messo a posto da Javascript, ma la forma senza Javascript è ancora comprensibile (da un umano). Ad esempio potrei mettere
miwcwkeyw@mowuswe.towp (rimuovere tutte le w)
e tramite Javascript trasformarlo in
In questo modo chi è senza Javascript è un po’ penalizzato ma almeno può avere l’indirizzo. Ma quando i robot inizieranno ad usare Javascript?
# - postato da Andrea - 23 Febbraio 2010 - 12:54
7
Io, pigramente, riscrivo in unicode l’indirizzo mail, sperando che i vari crowler non riescano a decodificare…
# - postato da Emiliano - 23 Febbraio 2010 - 13:40
8
Un’alternativa è utilizzare un indirizzo gmail o un alias che rimandi ad un indirizzo gmail.
E’ come il metodo 0, ma con un efficacia ottima/elevata :P
9
[…] Come nascondere un indirizzo e-mail agli spammer | Edit – Il blog di HTML.it (tags: php scripts javascript) […]
# - postato da links for 2010-02-23 » 4exp.net - 23 Febbraio 2010 - 18:04
10
Finalmente un gran bel post! :-)
In particolare mi incuriosisce il metodo dei CSS, molto curioso, veramente!
11
io uso questo semplice widget online che genera una praticissima stringa in js. Metto l’email nel source , clicco translate ed è pronto
12
Ottimi suggerimenti! Grazie!
ma…
Ho provato il metodo 3. Viene indicata la compatibilità con “mailto:”. Ho provato, apre un nuovo messaggio di posta (outlook), ma non trascrive l’indirizzo email. Ometto qualcosa???# - postato da Cristiano - 24 Febbraio 2010 - 16:14
13
Il codice del metodo 3 e 4 contengono un piccolo errore (voluto), i caratteri “& #” devono essere scritti senza lo spazio, introdotto appositamente per un limite della piattaforma.
Ciao!
# - postato da Andrea Ganduglia - 24 Febbraio 2010 - 16:28
14
Io uso da tempo il metodo 3 e non ho mai avuto problemi di spam, ovviamente prima o poi arriverà.
L’uso di un’immagine come fa FB non ha senso, è ad accessibilità zero, ma FB in questo è maestro :-D e inoltre non ripara dallo spam dato che agli spammer basterebbe introdurre gli stessi metodi di lettura delle immagini che suano per saltare i captcha.
Personalmente associo sempre un form dopo l’indirizzo email, dato che non sempre chi guarda il sito possiede al momento un programma di posta.
Basta pensare a chi si connette dalle biblioteche o dagli internet point, se sono fubi (pochi però) non usano il programma di posta trovato in loco.
Sulla questione dati sensibili @Gabriele, è proprio nella definizione di dato sensibile che trovi la scappatoia, se uno lo vuole rendere pubblico è una sua libera scelta e basta che firmi a te sviluppatore una liberatoria e poi dormi tranquillo.
Certo gli può capitare spam, ma è una sua libera scelta; se sei sul Web e ci vuoi lavorare non puoi trascendere da un indirizzo email, ti serve come il telefono :-)M.
# - postato da Marco Grazia - 24 Febbraio 2010 - 18:28
15
metodo 6:
spartano, elegante, creativo!
16
Aggiungo… per chi usa Wordpress, la possibilità di riachimare (ad es. nei template) la funzione:
echo antispambot(”latuapreziosamail@dominio.it”);
# - postato da Alt Design Blog - 26 Febbraio 2010 - 18:57
17
tt-reset_preferences







