Metodo efficace per nascondere la posta elettronica dai robot spam


195

Sulla mia homepage, sto usando questo metodo per nascondere la mia e-mail dai robot spam:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

Cosa ne pensi? È efficace? Quali altri metodi conosci o usi?


Questo è un duplicato di stackoverflow.com/questions/163628/… , oppure quell'altro non è valido perché è un lungo elenco wiki non comunitario.
Ciro Santilli 19 冠状 病 六四 事件 法轮功

5
Questo ha più voti, risposte e opinioni. Non dovrebbe essere chiuso a favore di un altro con meno voti, risposte e opinioni.
abatishchev,

1
Chiuderei quello per seguire il fatto che questo attira molto di più.
abatishchev,

6
La soluzione migliore non è condividere la tua soluzione . Sfortunatamente questa è una domanda del genere. È meglio trovare la soluzione e tenerla per te. Se uno viene standardizzato, gli spambots saranno adattati per superarlo.
Dimitris,

1
La soluzione migliore è combinare diverse delle soluzioni seguenti , ad esempio prima parte dell'email come immagine, seconda parte this.href.replace(/x/g,''), terza parte codificata esadecimale, ecc. Nessun bot di spam, non importa quanto intelligente, proverà diversi metodi di decodifica su diverse parti di un indirizzo email.

Risposte:


98

Questo è il metodo che ho usato, con un'inclusione sul lato server, ad esempio <!--#include file="emailObfuscator.include" -->dove emailObfuscator.includecontiene quanto segue:

<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

Per includere un indirizzo, utilizzo JavaScript:

<script type="text/javascript"> 
    gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

Poiché ricevo e-mail tramite Gmail dal 2005, lo spam è praticamente un problema. Quindi, non posso parlare di quanto sia efficace questo metodo. Potresti voler leggere questo studio (anche se è vecchio) che ha prodotto questo grafico:

inserisci qui la descrizione dell'immagine


Perché è necessario includere sul lato server emailObfuscator.include? Non sarebbe lo stesso che scriverlo in semplice .html? (forse è solo un esempio?) Inoltre, perché usi i commenti HTML nello <!-- -->script? E infine perché uno dei tuoi <script>tag è in minuscolo mentre altri sono in maiuscolo <SCRIPT>? Questi metodi aiutano a confondere i robot o qualcosa del genere?
Templare,

@Templar La SSI non è necessaria, né confonde i robot per quanto ne so. Rende (reso) il mio sito modulare (non uso più questo metodo). Il commento citava la fonte di dove ho trovato l'hack (ora un link non funzionante). Il cambiamento nel caso è solo un colpo di fortuna. Se confonde i robot, tanto meglio, ma dubito che abbia alcun effetto.
Fuhrmanator,

4
Uno studio più recente e completo che esplora la stessa idea: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon,

95

Lavorare con contenuti e attr in CSS:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a href="#" class="cryptedmail"
   data-name="info"
   data-domain="example"
   data-tld="org"
   onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld; return false;"></a>

Quando JavaScript è disabilitato, solo l'evento click non funzionerà, l'e-mail è ancora visualizzata.

Un altro approccio interessante (almeno senza un evento click) sarebbe quello di utilizzare il segno da destra a sinistra per sovrascrivere la direzione di scrittura. altro su questo: https://en.wikipedia.org/wiki/Right-to-left_mark


6
Questo ha bisogno di più pollice in su.
heXer,

Non so perché, ma sebbene questa soluzione sembri piuttosto impressionante, non riesce ad attivare il mio client di posta elettronica. Ecco un violino con cui provare: jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZea che browser usi? il tuo violino funziona bene per me in chrome, ie11, edge e firefox
cyptus

3
Eccezionale. Ma aggiungi un "; return false" all'evento onclick. Ciò impedirà la brutta aggiunta di # all'URL del browser (annullando l'href-link originale)
T4NK3R

5
TUTTAVIA - Non riesco a copiare manualmente l'indirizzo (visibile) di posta (in Chrome, Firefox o Edge)?
T4NK3R,

83

Dai un'occhiata a questo modo , abbastanza intelligente e usando CSS.

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

Il CSS sopra sovrascriverà quindi la direzione di lettura e presenterà il testo all'utente nell'ordine corretto.

Spero che sia d'aiuto

Saluti


54
È sicuramente divertente. Ma sfortunatamente, questo non è cliccabile e non funzionerà per copia / incolla, trascurando qualsiasi browser non CSS come i lettori braille.
Arjan,

Mhh carino, ma una volta che le persone che scrivono i crawler lo vedono, diventa inutile.
Mau,

6
La corrispondenza di un indirizzo e-mail inverso con un RegEx è altrettanto semplice quanto l'abbinamento non inverso. Lo spamming è un affare da miliardi di dollari e gli spammer non usano nemmeno i propri cicli della CPU per raschiare gli schermi. In effetti, hanno già letto questa conversazione e hanno adattato i loro metodi di conseguenza. Qualsiasi cosa leggibile dal computer sarà leggibile dai robot. Se eseguito da CSS o JavaScript.
Jani Hyytiäinen,

3
@ JaniHyytiäinen Non sono d'accordo. Il fatto che non stiano pagando per la CPU, non significa che abbiano risorse illimitate. Se l'esecuzione di un interprete JS risulta produrre troppo pochi indirizzi per il suo costo, lo disabiliteranno.
o0 '.

1
@Lohoris: Google riporta che il tempo medio di caricamento della pagina è (2,45 secondi) e la dimensione media della pagina (320 KB), ti dà un'idea di quanto puoi analizzare. Mentre un thread di download esegue le richieste, un thread di analisi può eseguire l'analisi. La maggior parte del download è in attesa. Ciò dà al thread dl la possibilità di controllare i prerequisiti prima di decidere di inviarlo al parser. Ad esempio, pagina di rendering, indexOf ('@'), indexOf ('mailto:'), ecc. Il thread di analisi riceverebbe solo + -200 caratteri attorno alla corrispondenza, il che consentirebbe un analisi così complessa da 'apparire' infinito in termini di potere di analisi.
Jani Hyytiäinen,

52

Ho una visione completamente diversa di questo. Uso MailHide per questo.

MailHide è un sistema di Google in base al quale l'utente deve completare un test reCAPTCHA per rivelare loro l'e-mail.


15
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
showdev,

5
Sebbene in genere sia d'accordo con questo sentimento, in questo caso la risposta è utilizzare uno strumento specifico. Se il collegamento scompare, eliminerò la risposta.
tvanfosson,

Grazie - Ottimo. Sto scrivendo qualcosa del genere (rivelare è il link): Inviami una e-mail: rivelare
chrs

6
Nota che Google ha disabilitato MailHide a partire dalla partita 2018. Come sempre con i servizi Google "gratuiti": li offrono fintanto che possono trarre profitto dai dati e, una volta ottenuto ciò di cui hanno bisogno, li rilasciano. Azienda più inaffidabile per offrire servizi gratuiti. Starei alla larga dai servizi di Google o di chiunque altro se hai bisogno di fare affidamento su qualsiasi cosa tu stia cercando di fare.
masi,

51

Inizialmente non è una mia idea ma non riesco a trovare l'autore:

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

Aggiungi tutte le x che vuoi. Funziona perfettamente per leggere, copiare e incollare e non può essere letto da un bot.


2
! Neat E gli utenti di dispositivi mobili?
Bodzio,

I mouseover vengono inoltre attivati ​​quando si tocca un collegamento. Dovrebbe funzionare bene.
Andrew Swift,

4
Funziona a condizione che il tuo indirizzo non contenga alcuna x. :-p Ma, lo so, usa solo una lettera diversa.
Dan Henderson,

1
Ma se javascript è disabilitato stai presentando agli utenti un indirizzo inesistente che ti rimbalzerà perdendoti un cliente / utente.
Xeevis,

34
Se JavaScript è disabilitato, nessuno dei miei siti funziona affatto ;-)
Andrew Swift

16

Penso che l'unico metodo infallibile che puoi avere sia la creazione di una pagina Contattami che è un modulo che invia a uno script che invia al tuo indirizzo email. In questo modo, il tuo indirizzo non è mai esposto al pubblico. Questo può essere indesiderabile per qualche motivo, ma penso che sia una soluzione abbastanza buona. Mi irrita spesso quando sono costretto a copiare / incollare l'indirizzo e-mail di qualcuno dal loro sito al mio client di posta e inviare loro un messaggio; Preferirei farlo direttamente attraverso un modulo sul loro sito. Inoltre, questo approccio ti consente di ricevere commenti anonimi, ecc. Assicurati solo di proteggere il tuo modulo utilizzando una sorta di schema anti-bot, come un captcha. Ce ne sono molti discussi qui su SO.


6
L'unico problema è che non hai una copia del messaggio che hai inviato a meno che tu non abbia il tempo di copiarlo e incollarlo da qualche altra parte. Personalmente non mi dispiace copiare e incollare ma a ciascuno il proprio.
gvkv,

6
Per quanto riguarda il mittente che non ne ha una copia: per molti tipi di moduli sul web amo l'opzione di ottenerne una copia. Tuttavia, spesso tale opzione consente l'abuso per l'invio anonimo di messaggi a chiunque ...
Arjan,

12
Questo può NASCONDERE il tuo indirizzo email, ma non bloccherà affatto lo spam, a meno che tu non protegga il tuo modulo con uno script di convalida dell'immagine captcha.
SimonDowdles,

1
Puoi anche risolvere il problema del mittente che non ha una copia includendo un'opzione per inviarlo anche a loro.
steinybot,

1
L'opzione "Invia una copia a te stesso" - trasforma efficacemente il modulo in un canone di spam, con te come mittente - cattiva idea!
T4NK3R,


10

Se hai il supporto php, puoi fare qualcosa del genere:

<img src="scriptname.php">

E lo scriptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "you@yourdomain.com";
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20)
     or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>

1
invece di usare php potresti creare fisicamente l'immagine. E come con il css invertito hai ancora il problema di non essere cliccabile e non puoi copiarlo se non usando una penna: P
Claudiu

9

So che la mia risposta non piacerà a molti, ma ti preghiamo di considerare i punti delineati prima di sfogliare.

Qualsiasi cosa facilmente leggibile dalla macchina sarà facilmente leggibile dalla macchina dagli spammer. Anche se le loro azioni ci sembrano stupide, non sono persone stupide. Sono innovativi e intraprendenti. Non usano solo i robot per raccogliere le e-mail, hanno una miriade di metodi a loro disposizione e, oltre a ciò, pagano semplicemente buoni elenchi di nuove e-mail. Ciò significa che hanno ottenuto migliaia di hacker black-hat in tutto il mondo per eseguire il loro lavoro. Persone pronte a codificare malware che raschiano gli schermi dei browser di altre persone e che alla fine rendono inutilizzabile qualsiasi metodo tu stia cercando di ottenere. Questo thread è già stato letto da più di 10 persone e stanno ridendo di noi. Alcuni di loro potrebbero anche annoiarsi fino alle lacrime per scoprire che non possiamo affrontare una nuova sfida.

Tieni presente che alla fine non stai cercando di risparmiare tempo, ma il tempo degli altri. Per questo motivo, ti preghiamo di considerare di trascorrere del tempo extra qui. Non esiste un proiettile magico di facile esecuzione che funzioni. Se lavori in un'azienda che pubblica e-mail di 100 persone sul sito e puoi ridurre 1 e-mail di spam al giorno a persona, stiamo parlando di 36500 e-mail di spam all'anno. Se la cancellazione di tale e-mail richiede in media 5 secondi, stiamo parlando di 50 ore lavorative all'anno. Per non parlare della quantità ridotta di fastidio. Quindi, perché non dedicare qualche ora a questo?

Non sono solo tu e le persone a ricevere l'e-mail che considerano il tempo un bene. Pertanto, è necessario trovare un modo per offuscare gli indirizzi e-mail in modo tale che non paghi per decifrarlo. Se si utilizza un metodo ampiamente utilizzato per offuscare le e-mail, è davvero utile decifrarlo. Da allora, il cracker metterà le mani su migliaia, se non decine o centinaia di migliaia di nuove e-mail. E per loro, otterranno soldi.

Quindi, vai avanti e codifica il tuo metodo. Questo è un raro caso in cui reinventare la ruota paga davvero. Utilizzare un metodo che non è leggibile dalla macchina e che preferibilmente richiederà una certa interazione dell'utente senza sacrificare l'esperienza dell'utente.

Ho impiegato circa 20 minuti per codificare un esempio di ciò che intendo. Nell'esempio, ho usato KnockoutJS semplicemente perché mi piace e so che probabilmente non lo userai da solo. Ma è comunque irrilevante. È una soluzione personalizzata che non è ampiamente utilizzata. Craccarlo non rappresenterà una ricompensa per averlo fatto poiché il metodo per farlo funzionerebbe solo su una singola pagina nella vasta Internet.

Ecco il violino: http://jsfiddle.net/hzaw6/

Il codice seguente non vuole essere un esempio di buon codice. Ma solo un breve esempio di codice che è molto difficile da capire per la macchina, qui gestiamo persino le e-mail. E anche se potesse essere fatto, non pagherà per l'esecuzione su larga scala.

E sì, lo so che non funziona su IE = lte8 a causa di "Impossibile ottenere" attributi "di proprietà di riferimento indefinito o nullo" ma semplicemente non mi interessa perché è solo una demo del metodo, non un'implementazione effettiva, e non è destinato a essere utilizzato in produzione così com'è. Sentiti libero di codificare il tuo che è più fresco, tecnicamente più solido ecc.

Oh, e mai e poi mai nominare qualcosa di mail o e-mail in html o javascript. È semplicemente troppo facile scrappare il DOM e l'oggetto finestra per qualsiasi cosa di nome posta o e-mail e verificare se contiene qualcosa che corrisponde a un'e-mail. Questo è il motivo per cui non vuoi mai avere variabili che contengano e-mail nella sua forma completa e questo è anche il motivo per cui desideri che l'utente interagisca con la pagina prima di assegnare tali variabili. Se il modello a oggetti javascript contiene indirizzi di posta elettronica nello stato pronto per DOM, li stai esponendo agli spammer.

HTML:

<div data-bind="foreach: contacts">
    <div class="contact">
        <div>
            <h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
            <ul>
                <li>Phone: <span data-bind="text: phone"></span></li>
                <li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
            </ul>
        </div>
    </div>
</div>

Il JS

function ViewModel(){
    var self = this;

    self.contacts = ko.observableArray([
        { firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
        { firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
        { firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
    ]);
    self.msgMeToThis = ko.observable('');
    self.reveal = function(m, e){
        var name = e.target.attributes.href.value;
        name = name.replace('#', '');
        self.msgMeToThis(name);
    };
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);

8

Uno dei miei metodi preferiti è quello di offuscare l'indirizzo e-mail usando php, un classico esempio è convertire i caratteri in valori esadecimali in questo modo:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

E poi nel mio markup lo chiamerò semplicemente come segue:

  <a href="mailto:<?php echo myobfiscate('someone@somewhere.com'); ?>"
title="Email me!"><?php echo myobfiscate('someone@somewhere.com');?> </a>

Quindi esamina la tua fonte, rimarrai piacevolmente sorpreso!


Questo è un bell'esempio. Grazie. Qualche idea su SpamBot usando la decodifica HEX?
jasonflaherty,

7

Puoi provare a nascondere i caratteri usando entità html in hexa (es: & # x40 per @). Questa è una soluzione conveniente, poiché un browser corretto la tradurrà e puoi avere un link normale. Lo svantaggio è che un bot può tradurlo teoricamente, ma è un po 'insolito. Lo uso per proteggere la mia e-mail sul mio blog.

Un'altra soluzione è utilizzare JavaScript per assemblare parte dell'indirizzo e decodificare al volo l'indirizzo. Lo svantaggio è che un browser disabilitato per JavaScript non mostra il tuo indirizzo.

La soluzione più efficace consiste nell'utilizzare un'immagine , ma per l'utente è un problema dover copiare l'indirizzo a mano.

La tua soluzione è piuttosto buona , poiché aggiungi solo uno svantaggio (scrivendo manualmente @) solo per gli utenti che hanno JavaScript disabilitato. Puoi anche essere più sicuro con:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

5

Gli spambots non lo interpreteranno, perché è un metodo meno conosciuto :)

Innanzitutto, definisci il css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

Ora, ovunque tu voglia visualizzare la tua email, inserisci semplicemente il seguente HTML:

<div id="email"></div>

E tada!


Funziona, ma non supporta il copia incolla, il che può influire sull'usabilità per la maggior parte degli utenti
Iruku Kagika,

4

Uso una combinazione molto semplice di CSS e jQuery che visualizza correttamente l'indirizzo e-mail per l'utente e funziona anche quando si fa clic o si passa l'ancora:

HTML:

<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>

CSS:

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

jQuery:

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

Ecco un esempio funzionante.


mostrerà il valore corretto di href nella barra di stato del browser quando si passa il mouse sopra il collegamento?
Nik O'Lai,

Sì, mostra il valore corretto di href quando il collegamento viene spostato. Ecco perché il metodo jQuery .hover deve essere implementato.
Sergiu,

Sfortunatamente no, non mostra il valore corretto di href, almeno, quando passi il mouse sopra il link per la prima volta (sono io@example.spam). Al secondo passaggio del mouse è andato tutto bene. Provalo con il tuo link.
Nik O'Lai,

1
Funziona in Chrome e IE. Sembra solo su Firefox, al primo passaggio del mouse, la barra di stato non viene aggiornata. Proverò a trovare una soluzione per Firefox.
Sergiu,

1
Vedo, vedo, in realtà mi piace questo.
Eric Bishard,

3

! - Aggiungendo questo come riferimento, non so quanto potrebbero essere obsolete le informazioni, ma racconta alcune semplici soluzioni che non richiedono l'uso di alcun script

Dopo averlo cercato da solo, mi sono imbattuto in questa pagina ma anche in queste pagine:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

prova a invertire l'indirizzo email

Esempio HTML semplice:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com

Lo stesso effetto usando i CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com

Combinarlo con uno dei metodi precedentemente menzionati può persino renderlo più efficace


3

Una soluzione semplice è utilizzare entità HTML anziché caratteri effettivi. Ad esempio, "me@example.com" verrà convertito in:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

2
Prova google.se/search?q=HTML+entities+converter che dovrebbe tenervi occupati;)
grapefrukt

1
Google può trovare molte pagine per questo. Un esempio: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas,

4
Ma un bot non potrebbe regexare altrettanto facilmente?
gargantuan,

20
Ouch, l'esempio me @ stack ... dovrebbe essere scritto come me@example.com, me@example.net o me@example.org - questi sono gli unici nomi di dominio che i non proprietari dovrebbero usare negli esempi!
Arjan,

4
Non così efficace, secondo techblog.tilllate.com/2008/07/20/…
Fuhrmanator

3

Ecco la mia versione funzionante:


Crea da qualche parte un contenitore con un testo di fallback:

<div id="knock_knock">Activate JavaScript, please.</div>

E aggiungi in fondo al DOM (con il rendering) il seguente frammento:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

Aggiunge il collegamento ipertestuale generato al contenitore specificato:

<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>

Inoltre, ecco una versione ridotta:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>

2

Il metodo migliore per nascondere gli indirizzi e-mail è valido solo fino a quando il programmatore di bot non scopre questa "codifica" e implementa un algoritmo di decodifica.

L'opzione JavaScript non funzionerà a lungo, perché ci sono molti crawler che interpretano JavaScript.

Non c'è risposta, imho.


Esistono crawler che interpretano JavaScript? Il mio unico metodo di codifica JavaScript è sembrato funzionare bene per me negli ultimi anni - il mio tasso di spam è stato abbastanza stabile ~ 4 / settimana, quindi non mi sono preoccupato degli indirizzi di altre persone che ho affidato a questo metodo. Dovrei?
Kev,

Di sicuro, potrebbe escludere molti crawler, ma io, se
creassi

più sforzo di quanto si possa pensare
codardo anonimo il

Google sta eseguendo la scansione di alcuni JS ora.
Alister Bulman,

2

Probabilmente ci sono robot che riconoscono il simbolo [at]e altri travestimenti @. Quindi questo non è un metodo davvero efficace.

Sicuro che potresti usare alcune codifiche come codifica URL o riferimenti a caratteri HTML (o entrambi):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

Ma poiché è legale usarli, ogni browser / client di posta elettronica dovrebbe gestire anche queste codifiche.


Totalmente d'accordo, gli spammer sono persone "intelligenti", dopo anni di persone che hanno aggiunto [at] o [punto] al posto della sintassi, ovviamente avranno algoritmi che raccolgono questi schemi.
SimonDowdles,

Che dire della decodifica di questi valori esadecimali?
jasonflaherty,

2

Sono un fan di SpamSpan : è offuscato, ma è comunque decifrabile se JS è disabilitato. Sembra funzionare anche se lo uso da circa un anno su un sito Web a basso traffico.

C'è anche un modulo per Drupal per trasformare automaticamente le e-mail in SpamSpans, se ne hai bisogno.


1

Funziona se faccio clic con il pulsante destro del mouse sul collegamento e scelgo "copia URL"? Altrimenti, non è una situazione ideale (faccio raramente clic su un collegamento mailto, preferendo copiare l'indirizzo e-mail e incollarlo nella mia applicazione di posta o ovunque sia necessario in un determinato momento).

Un tempo ero abbastanza paranoico per proteggere il mio indirizzo di posta elettronica online (UseNet, web e simili), ma in questi giorni sospetto che vengano generati più "possibili obiettivi per lo spam" che abbinano programmaticamente parti locali a domini. Baso questo sul fatto di aver, a volte, esaminato i registri del mio server di posta. Ci sono molti tentativi di consegna ad indirizzi inesistenti (comprese le versioni troncate dell'esca per lo spam che ho appeso su UseNet alla fine degli anni '90, quando lo scraping degli indirizzi era molto diffuso).


1

dopo aver usato così tante tecniche che ho trovato un modo semplice e molto amichevole, i robot cercano @ Símbolo e recentemente cercano [at] ant la sua variazione, quindi uso 2 tecniche

  1. scrivo la mia e-mail su un'immagine che usano i domaintolls e funziona perfettamente o
  2. per sostituire il Símbolo (@) con un'immagine simile

@ sostituisci e l'immagine alt sarà alt = "@", quindi il bot troverà un'immagine e qualsiasi essere umano la vedrà come un indirizzo normale, quindi se lo copia copierà l'email e il lavoro sarà don, quindi il codice sarà

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>


1

Per prima cosa mi assicurerei che l'indirizzo e-mail venga visualizzato solo quando JavaScript è abilitato. In questo modo, non esiste un testo semplice che può essere letto senza javascript.

In secondo luogo, un modo per implementare una funzione sicura è stare lontano dal <button>tag. Questo tag richiede un inserimento di testo tra i tag, che lo rende leggibile dal computer. Invece prova il<input type="button"> con un gestore javascript per un onClick. Quindi utilizzare tutte le tecniche menzionate da terzi per implementare una notazione e-mail sicura.

Un'altra opzione è quella di avere un pulsante con "Fai clic per visualizzare l'indirizzo e-mail". Una volta fatto clic, questo si trasforma in un messaggio di posta elettronica codificato (i caratteri nei codici HTML). Con un altro clic, questo reindirizza alla funzione "mailto: email"

Una versione non codificata dell'ultima idea, con indirizzi e-mail selezionabili e non selezionabili:

<html>
<body>
<script type="text/javascript">
      e1="@domain";
      e2="me";
      e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>

Vedi se questo è qualcosa che vorresti e combinalo con le idee degli altri. Non puoi mai essere troppo sicuro.


2
oh guarda - me@domain.extension - c'è l'indirizzo e-mail in chiaro.
Alister Bulman,

1

E la mia funzione. L'ho creato guardando le risposte inserite in questo argomento.

 function antiboteEmail($email)
 {
        $html = '';

        $email = strrev($email);
        $randId = rand(1, 500);

        $html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
        $html .= <<<EOD
                <script>
                $(document).ready(function(){

                    var addr = "$email";
                    addr = addr.split("").reverse().join("");
                    $("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
                });
                </script>
EOD;

        return $html;
    }

Utilizza due metodi: dir da destra a sinistra e messa javascript.


1

Opzione 1: dividere l'indirizzo e-mail in più parti e creare un array in JavaScript da queste parti. Quindi unire queste parti nell'ordine corretto e utilizzare la proprietà .innerHTML per aggiungere l'indirizzo e-mail alla pagina Web.

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
 document.getElementById("email").innerHTML=email; 
 </script>

Opzione 2: utilizzare l'immagine anziché il testo dell'email

Sito web del creatore di immagini dal testo: http://www.chxo.com/labelgen/

Opzione 3: possiamo usare AT invece di "@" e DOT invece di "."

cioè:

 info(AT)XXXabc(DOT)com 

1
Penso che l'opzione 1 non sia una buona opzione. Un parser in esecuzione accanto a un bot potrebbe facilmente capire il valore di innerHTML, e probabilmente l'opzione 3 non è così buona perché un robot intelligente potrebbe capirlo. Penso che l'opzione 2 sia la migliore.
John Sonderson,

1

Non mi piace il mixaggio di JavaScript e HTML, ecco perché utilizzo questa soluzione. Funziona bene per me, per ora.

Idea : potresti renderlo più complicato fornendo informazioni crittografate neldata attributi e decrittografandole all'interno di JS. Questo è fatto semplicemente sostituendo le lettere o semplicemente invertendole.

HTML :

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS :

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

Provalo: http://jsfiddle.net/x6g9L817/


1

che dire di HTML_CHARACTER ?:

joe&#064;mail.com

uscite

joe@mail.com

1
L'indirizzo e-mail non è selezionabile in questo modo e il posizionamento del simbolo @ non sarà a prova di proiettile, in quanto non sarà sempre lo stesso di quando viene inserito in linea.
Brent O'Connor,

0

Ecco una semplice soluzione jquery a questo problema:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

0

Mi piace di più la risposta di ofaurax ma mi piacerebbe modificarla per un po 'più di email nascosta:

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

0

Devo solo fornire un'altra risposta. Ho appena pensato a qualcosa di divertente con cui giocare.

Ho scoperto che in molte tabelle di caratteri comuni, le lettere @ e az riappaiono più di una volta. Puoi mappare i caratteri originali sui nuovi mapping e rendere più difficile per i robot spam capire qual è l'e-mail.

Se attraversi la stringa e ottieni il codice carattere di una lettera, quindi aggiungi 65248 e costruisci un'entità html in base al numero, ottieni un indirizzo e-mail leggibile dall'uomo.

var str = 'john.doe@email.com';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
    var num = str.charCodeAt(position);
    return ('&#' + (num + 65248) + ';');
});

Ecco un violino funzionante: http://jsfiddle.net/EhtSC/8/

Puoi migliorare questo approccio creando un set più completo di mappature tra caratteri che sembrano uguali. Ma se si copia / incolla l'e-mail sul blocco note, ad esempio, si ottengono molte caselle.

Per superare alcuni dei problemi relativi all'esperienza utente, ho creato l'e-mail come collegamento. Quando lo fai clic, rimappa i caratteri sui loro originali.

Per migliorare ciò, puoi creare mappature di caratteri più complesse, se lo desideri. Se riesci a trovare diversi caratteri che possono essere utilizzati, ad esempio, al posto di "a", perché non mapparli a caso.

Probabilmente non è l'approccio più sicuro di sempre, ma mi sono davvero divertito a giocarci: D

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.