javascript email - Il modo migliore per offuscare un indirizzo e-mail su un sito web?





obfuscation js (22)


Non utilizzare tecniche di offuscamento qui perché è probabilmente il primo posto che i raccoglitori di e-mail cercheranno per scoprire come le e-mail stanno offuscando le persone. Se devi avere il tuo indirizzo email visibile sul sito non copiare semplicemente testualmente il metodo di qualcun altro; offuscarlo in un modo unico che nessun altro sito ha utilizzato in modo che il tuo metodo non sia noto ai raccoglitori prima che visitino il tuo sito.

Ho passato gli ultimi giorni a lavorare sull'aggiornamento del mio sito web personale. L'URL del mio sito personale è (il mio nome). (Il mio cognome) .com, dato che il mio cognome è piuttosto insolito, e ho avuto la fortuna di raccogliere il nome del dominio. Il mio indirizzo e-mail è (il mio nome) @ (il mio cognome) .com. Quindi, davvero, quando si tratta di indovinarlo, non è molto difficile.

Ad ogni modo, voglio integrare un link mailto: nel mio sito web, così le persone possono contattarmi. E, nonostante il mio indirizzo e-mail non sia molto difficile da indovinare, preferirei non averlo raccolto dai bot spam che si limitano a scansionare i siti per i pattern degli indirizzi e-mail e li aggiungono al loro database.

Qual è il modo migliore per me di offuscare il mio indirizzo e-mail, preferibilmente in forma di link? I metodi che conosco sono:

<a href="mailto:[email protected]">e-mail me</a>

Funziona, ma significa anche che non appena il mio sito web raggiunge Google, guiderò lo spam mentre i bot spam selezionano facilmente il mio indirizzo e-mail.

<img src="images/e-mail.png" />

Questo è meno desiderabile, perché non solo i visitatori non potranno fare clic su di esso per inviarmi una e-mail, ma i robot di spam più intelligenti saranno probabilmente in grado di rilevare i caratteri che l'immagine contiene.

So che probabilmente non esiste una soluzione perfetta, ma mi stavo chiedendo cosa pensassero tutti meglio. Sono assolutamente disposto ad usare JavaScript, se necessario, dato che il mio sito Web ne fa già uso.




L'attuale soluzione accettata è quella di creare un modulo di contatto che consenta agli utenti di inviarti tramite posta elettronica. Se ricevi un sacco di spam da quello (non lo faccio sul mio sito), puoi aggiungere un captcha per buona misura, e sarai lontano dal "low hanging fruit" a quel punto.

Il fatto è che se si sta fornendo un collegamento su cui un utente può fare clic per aprire il proprio client di posta elettronica con il proprio indirizzo nel campo A :, il computer è in grado di decifrare l'indirizzo e-mail dalla pagina e così può un bot antispam.




Se dici sul tuo sito che "Il mio indirizzo e-mail è (il mio nome) @ (il mio cognome) .com", e il tuo nome e cognome sono dannatamente ovvi, questa sembra essere la migliore protezione contro lo spam hai intenzione di ottenere.




il mio è in realtà semplice:

<h3 id="email">[email protected]</h3><!-- add a fake email -->


    $(document).ready(function(){
//my email in reverse :)
            var s = '[email protected]';
            var e = s.split("").reverse().join("");
            $('#email').html('<a href="mailto:'+e+'">'+e+'</a>');
    });



<!-- Multi-Email Obfuscator  -->
<!-- step 1: &#064; = @  -->
<!-- step 2: a scrap element  -->
<!-- step 3: ROT13 encode for .com  -->
info<!-- step 1 -->&#064;<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>



I caratteri sono codificati come entità HTML ( qualcosa di simile a questo ). Non richiede che JS sia abilitato e sembra che abbia bloccato la maggior parte dello spam. Suppongo che un robot intelligente possa ancora raccoglierlo, ma non ho avuto alcun problema.




Dai un'occhiata a this .

Il modulo Enkoder crittograferà il tuo indirizzo email e convertirà il risultato in un JavaScript che si valuta da solo, nascondendolo dai robot di raccolta e-mail che eseguono la scansione del Web alla ricerca di indirizzi esposti. Il tuo indirizzo verrà visualizzato correttamente dai browser Web, ma sarà praticamente indecifrabile ai robot di raccolta di email.




Se qualcuno usa Rails, può usare actionview-encoded_mail_to gem. ( https://github.com/reed/actionview-encoded_mail_to )

Ci sono alcune opzioni:

: encode - Questa chiave accetta le stringhe "javascript" o "hex". Passando "javascript" creerai e codifichi dinamicamente il link mailto, quindi lo eleverà nel DOM della pagina. Questo metodo non mostrerà il collegamento sulla pagina se l'utente ha JavaScript disabilitato. Passando "esadecimale", esadecimale codificherà email_address prima di emettere il collegamento mailto.

: replace_at - Quando il nome del collegamento non viene fornito, l'indirizzo email viene utilizzato per l'etichetta del collegamento. Puoi usare questa opzione per offuscare l'indirizzo email sostituendo il segno @ con la stringa data come valore.

: replace_dot - Quando il nome del collegamento non viene fornito, l'indirizzo email viene utilizzato per l'etichetta del collegamento. Puoi usare questa opzione per offuscare l'indirizzo email sostituendo il. nell'e-mail con la stringa indicata come valore.




Hai menzionato questo per il tuo sito personale. Sul mio sito personale (ad esempio, bobsomers.com) ho solo un paragrafo che dice questo:

Il modo migliore per entrare in contatto con me prima che il nuovo sito sia attivo è mandarmi un'email. Il mio indirizzo email è il mio nome in questo sito. Se non riesci a capirlo da quel suggerimento, beh, potresti trovare l'e-mail più di una sfida che capire il mio indirizzo.

La gente sembra essere in grado di capirlo bene, mentre ricevo sempre email legittime. A volte le soluzioni migliori non richiedono la scrittura di alcun codice. :)




Un sito web che uso utilizza un mezzo JavaScript un po 'semplicistico per (si spera) tenere fuori gli spambots.

I collegamenti e-mail chiamano una funzione JS:

function sendEmail(name, domain) {
    location.href = 'mailto:' + name + '@' + domain;
}

Per assicurarti che solo gli utenti che hanno abilitato JS possano vedere il link, scriverli con questo:

function writeEmailLink(realName, name, domain) {
    document.write('<a href="javascript:sendEmail(\''
      + name + '\', \'' + domain + '\')">');
    document.write(realName);
    document.write('</a>');
}   

L'uso di una funzione JS per scrivere un collegamento che chiama un altro significa che ci sono due livelli di protezione.




Un modo leggero per offuscare l' href di un'ancora è codificarlo in base64:

> btoa('mailto:[email protected]')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

E quindi includerlo come codice hard:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

O dinamicamente lato server, ad esempio in PHP:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:[email protected]") ?>')">E-Mail</a>

In combinazione con la reversione delle stringhe potrebbe essere piuttosto spam-save:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:[email protected]") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("[email protected]") ?></a>



Come detto sopra, uso anche l'offuscamento di JavaScript dal http://www.jottings.com/obfuscator/ .

La pagina web genera alcuni JavaScript che possono essere migliorati. La stringa mailto: text è in chiaro e identificabile dai robot (che potrebbero individuare questo e non nascondere questa stringa), ma se si entra nella pagina web di jottings.com un indirizzo email del modulo mailto:[email protected] invece di [email protected] e quindi rimuove il testo mailto: dal JavaScript che viene generato, si ha improvvisamente qualche JavaScript che non sembra avere nulla a che fare con l'e-mail - solo JavaScript casuale di cui il web è pieno. Uno può migliorare ulteriormente eliminando il testo del link - ho sostituito il mio con un'immagine del mio indirizzo email che è in un font piuttosto oscuro. Quindi, nel caso in cui questo metodo su jottings.com diventi popolare, ho randomizzato i nomi delle variabili nel codice JavaScript di output per rendere difficile per un robot individuare un'istanza di codice JavaScript generato da jottings.

Ovviamente alcuni di questi miglioramenti potrebbero essere incorporati nel meccanismo degli stessi jottings, e poiché il codice è apertamente disponibile, questo sarebbe relativamente facile.

Un esempio può rendere questo un po 'più chiaro. Ho usato Jottings Obfuscator al link sopra per oscurare mailto:[email protected] (nota che sto ingannando l'intenzione originale del sito web di jottings inserendo la stringa mailto:[email protected] invece di [email protected] ) con il testo "Inviami e-mail", che i jottings hanno trasformato in questo Javascript:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:[email protected]"
  key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else { 
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

Dopo averlo recuperato, lo incollo in un editor e:

  1. rimuovere il mailto:
  2. sostituire il testo del collegamento con il puntatore ad un'immagine del mio indirizzo email
  3. rinomina tutte le variabili
  4. sostituire la sezione "noscript" con un altro link all'immagine dell'indirizzo email

Finisco con questo:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:[email protected]"
  kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=kudzu.length
  klonk=""
  for (variter=0; variter<kudzu.length; variter++) {
    if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
      lutu = kudzu.charAt(variter)
      klonk += (lutu)
    }
    else {
      lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
      klonk += (kkeoy.charAt(lutu))
    }
  }
document.write("<a href='"+klonk+"'><img src='contactaddressimage.png' alt='Send Me Email' border='0' height='62' width='240'></a>")
}
//-->
</script>
<noscript>
    <img src="contactaddressimage.png" border="0" height="62" width="240">
    <font face="Arial" size="3"><br>&nbsp;</font></p>
</noscript>



Apparentemente usare i CSS per cambiare la direzione del testo funziona abbastanza bene. Quel collegamento ha anche una prova di una serie di altri metodi di offuscamento.

Qualunque cosa tu usi sarà inevitabilmente sconfitta. Il tuo obiettivo principale dovrebbe essere quello di evitare di annoiare i tuoi utenti.







Se lavori con PHP, puoi prendere uno script gratuito che lo faccia automaticamente. Si chiama "Private Daddy" e lo usiamo per il nostro servizio di streaming audio online. Solo una riga di codice e funziona fuori dagli schemi ... puoi prenderlo qui




La soluzione di chiamata Ajax

La cosa migliore è avere un modulo sul sito Web e non mostrare l'indirizzo email, perché tutti i robot sono più intelligenti giorno dopo giorno, ma se è necessario mostrare l'indirizzo e-mail sul sito Web, è possibile farlo con una chiamata ajax sul proprio server e mostrarlo al clic.

HTML

<a class="obfmail" href="#" rel="info">click here to show email address</a>

o

<a class="obfmail" href="#" rel="info">
    <img src="img/click-to-show-email.jpg">
</a>

jQuery

$(document).one'click', '.obfmail', function(e) {
    e.preventDefault();
    a = $(this);
    addr = a.attr('rel');
    $.ajax({
        data: { 
            email: addr
        },
        url : "/a/getemail",
        type: "POST",
        dataType: 'json',
        success: function(data) {
            a.html(data.addr);
            a.attr('href', 'mailto:' + data.addr);
        }
    });
});

PHP

if($_POST['email']) {
    ...
    return json_encode(array(
        code     => '200',
        response => 'success',
        addr     => '[email protected]'
    ));
}

Per maggiore sicurezza, puoi modificare .one da .one come questo $(document).one('click', '.obfmail', function(e) { o anche lavorare con un token generato da PHP che passi in dati su ajax chiama, per accettare solo una chiamata della funzione Ajax come questa:

html: <a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">

jQuery:

...
addr = a.attr('rel');
tkn  = a.attr('token');
$.ajax({
    data: { 
        email: addr,
        token: tkn
    }, ...

.

È possibile anche codificare l'indirizzo email restituito o invertirlo.

.

Funzionando bene anche per i numeri di telefono!




reCAPTCHA offre un semplice servizio di offuscamento della posta elettronica . Non è necessario creare un account e puoi iniziare a usarlo immediatamente. Puoi usare il servizio come link o come popup.

Dopo che il captcha è stato risolto, il tuo indirizzo email appare come href / mailto, in modo che possa essere cliccato / seguito dagli utenti che hanno configurato i loro client di posta elettronica per funzionare con i loro browser.




Onestamente, il tuo problema potrebbe essere discutibile se ti chiedessi se un mailto sia davvero quello che vuoi usare. Un sacco di persone che utilizzano la posta Web, ad esempio, o che non dispongono della corretta configurazione del client di posta nel loro browser, non trarranno beneficio da un mailto. Stai esponendo il tuo indirizzo email per una funzione che non funzionerà per gran parte dei tuoi utenti.

Quello che potresti fare invece è usare un modulo per inviare l'e-mail dietro le quinte in modo che l'indirizzo e-mail sia nascosto e non devi preoccuparti dei poveri sapienti che non trarranno beneficio da un mailto.




Puoi fare come Google su Google Code (e Gruppi). Visualizza una parte dell'email e una parte selezionabile ("..."). Facendo clic si indica che si desidera conoscere l'e-mail e viene richiesto di inserire un captcha. In seguito l'e-mail (e altri?) Sono visibili per te.




Personalmente, ho rinunciato a nascondere il mio indirizzo email. Trovo più facile esaminare le migliori soluzioni di filtro antispam che preoccuparsi di offuscare. Potresti passare giorni a cercare il modo migliore per offuscare il tuo indirizzo, e quindi basta una persona per vendere il tuo indirizzo a uno spammer e tutto quel lavoro è inutile.




Un altro approccio potrebbe essere l'utilizzo di un framework JavaScript e il collegamento del dato / modello agli elementi HTML. Nel caso di AngularJS, gli elementi HTML dovrebbero essere scritti come:

<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>

Il bind di interpolazione {{data}} utilizza una variabile di ambito che contiene il valore di posta elettronica effettivo. Inoltre, è possibile utilizzare un filtro che gestisce la decodifica dell'email come segue:

<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>

I vantaggi sono nel modo in cui l'HTML è scritto. Il rovescio della medaglia è che richiede il supporto di scripting che alcuni potrebbero essere un no no.

solo un altro approccio.




La crittografia è semplice: come altri hanno sottolineato, ci sono classi nello spazio dei nomi System.Security.Cryptography che fanno tutto il lavoro per te. Usali piuttosto che qualsiasi soluzione sviluppata in casa.

Ma la decifrazione è anche facile. Il problema che si presenta non è l'algoritmo di crittografia, ma protegge l'accesso alla chiave utilizzata per la decrittografia.

Vorrei utilizzare una delle seguenti soluzioni:

  • DPAPI che utilizza la classe ProtectedData con ambito CurrentUser. Questo è facile in quanto non è necessario preoccuparsi di una chiave. I dati possono essere decifrati solo dallo stesso utente, quindi non sono utili per la condivisione di dati tra utenti o macchine.

  • DPAPI che utilizza la classe ProtectedData con ambito LocalMachine. Ad esempio, per proteggere i dati di configurazione su un singolo server sicuro. Ma chiunque possa accedere alla macchina può crittografarlo, quindi non va bene a meno che il server non sia sicuro.

  • Qualsiasi algoritmo simmetrico. Generalmente utilizzo il metodo statico SymmetricAlgorithm.Create () se non mi interessa quale algoritmo viene utilizzato (in effetti è Rijndael per impostazione predefinita). In questo caso devi proteggere la tua chiave in qualche modo. Ad esempio puoi nasconderla in qualche modo e nasconderlo nel tuo codice. Ma sappi che chiunque sia abbastanza intelligente da decompilare il tuo codice sarà probabilmente in grado di trovare la chiave.





javascript html email obfuscation