Effektive Methode zum Ausblenden von E-Mails vor Spam-Bots


195

Auf meiner Homepage verwende ich diese Methode, um meine E-Mails vor Spam-Bots zu verbergen:

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

Was denkst du darüber? Ist es effektiv? Welche anderen Methoden kennen oder verwenden Sie?


Entweder handelt es sich um ein Duplikat von stackoverflow.com/questions/163628/… , oder das andere ist ungültig, da es sich um eine lange Community-Wiki-Liste handelt.
Ciro Santilli 法轮功 冠状 病 六四 事件 19

5
Dieser hat mehr Upvotes, Antworten und Ansichten. Es sollte nicht zugunsten eines anderen geschlossen werden, der weniger positive Stimmen, Antworten und Ansichten hat.
Abatishchev

1
Ich würde dieses schließen, um der Tatsache zu folgen, dass dieses viel mehr anzieht.
Abatishchev

6
Die beste Lösung besteht darin , Ihre Lösung nicht zu teilen . Leider ist dies eine solche Frage. Am besten finden Sie Ihre Lösung und behalten sie für sich. Wenn man standardisiert wird, werden Spambots angepasst, um es zu überwinden.
Dimitris

1
Die beste Lösung besteht darin, mehrere der folgenden Lösungen zu kombinieren , z. B. den ersten Teil der E-Mail als Bild, den zweiten Teil this.href.replace(/x/g,''), den dritten Teil hexadezimal codiert usw. Kein Spam-Bot, egal wie clever er auch sein mag, versucht verschiedene Methoden zum Decodieren verschiedener Teile eines E-Mail-Addresse.

Antworten:


98

Dies ist die Methode, die ich mit einem serverseitigen Include verwendet habe, z. B. <!--#include file="emailObfuscator.include" -->wo emailObfuscator.includeFolgendes enthalten ist:

<!-- // 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>

Um eine Adresse einzuschließen, verwende ich 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>

Da ich seit 2005 E-Mails über Google Mail erhalte, ist Spam so gut wie kein Problem. Ich kann also nicht sagen, wie effektiv diese Methode ist. Vielleicht möchten Sie diese Studie lesen (obwohl sie alt ist), die diese Grafik erstellt hat:

Geben Sie hier die Bildbeschreibung ein


Warum benötigen Sie serverseitiges Include von emailObfuscator.include? Wäre es nicht dasselbe, als würde man es einfach in HTML schreiben? (Vielleicht ist es nur ein Beispiel?) Warum verwenden Sie auch HTML-Kommentare <!-- -->im Skript? Und warum ist einer Ihrer <script>Tags in Kleinbuchstaben, während andere in Großbuchstaben geschrieben sind <SCRIPT>? Helfen diese Methoden, Bots oder ähnliches zu verwirren?
Templer

@ Templar Die SSI ist weder notwendig noch verwirrt sie Bots, soweit ich weiß. Es macht meine Site modular (mache diese Methode nicht mehr wirklich). Der Kommentar zitierte die Quelle, wo ich den Hack gefunden habe (jetzt ein defekter Link). Die Änderung im Fall ist nur ein Zufall. Wenn es Bots verwirrt, umso besser, aber ich bezweifle, dass es irgendwelche Auswirkungen hat.
Fuhrmanator

4
Eine neuere und vollständigere Studie, die dieselbe Idee untersucht: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

95

Arbeiten mit Inhalten und 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>

Wenn Javascript deaktiviert ist, funktioniert nur das Klickereignis nicht. E-Mails werden weiterhin angezeigt.

Ein weiterer interessanter Ansatz (zumindest ohne Klickereignis) wäre die Verwendung der Markierung von rechts nach links, um die Schreibrichtung zu überschreiben. mehr dazu: https://en.wikipedia.org/wiki/Right-to-left_mark


6
Dies erfordert mehr Daumen hoch.
HeXer

Ich weiß nicht warum, aber obwohl diese Lösung ziemlich beeindruckend aussieht, kann sie meinen E-Mail-Client nicht auslösen. Hier ist eine Geige, mit der Sie testen können: jsfiddle.net/wd436tg3
Ricardo Zea

1
@ RicardoZea welchen Browser benutzt du? Ihre Geige funktioniert gut für mich in Chrom, dh 11, Rand und Firefox
Cyptus

3
Genial. Fügen Sie dem onclick-Ereignis jedoch ein "; return false" hinzu. Dies verhindert das hässliche Hinzufügen von # zur URL des Browsers (durch Abbrechen des ursprünglichen href-Links)
T4NK3R

5
JEDOCH - Ich kann die (sichtbare) E-Mail-Adresse nicht manuell kopieren (weder in Chrome, Firefox noch in Edge).
T4NK3R

83

Schauen Sie sich diesen Weg an , ziemlich clever und mit CSS.

CSS

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

HTML

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

Das obige CSS überschreibt dann die Leserichtung und präsentiert dem Benutzer den Text in der richtigen Reihenfolge.

Ich hoffe es hilft

Prost


53
Es ist sicherlich lustig. Leider ist dies nicht anklickbar und funktioniert nicht zum Kopieren / Einfügen, während Nicht-CSS-Browser wie Braille-Reader vernachlässigt werden.
Arjan

Mhh schön, aber sobald Leute, die Crawler schreiben, es sehen, wird es nutzlos.
Mau

6
Das Abgleichen der umgekehrten E-Mail-Adresse mit einem RegEx ist genauso einfach wie das Abgleichen ohne Umkehrung. Spam ist ein Milliardengeschäft, und die Spammer verwenden nicht einmal ihre eigenen CPU-Zyklen, um die Bildschirme abzukratzen. Tatsächlich haben sie dieses Gespräch bereits gelesen und ihre Methoden entsprechend angepasst. Alles, was vom Computer gelesen werden kann, kann von den Bots gelesen werden. Ob per CSS oder JavaScript ausgeführt.
Jani Hyytiäinen

3
@ JaniHyytiäinen Ich bin anderer Meinung. Die Tatsache, dass sie nicht für die CPU bezahlen, bedeutet nicht, dass sie über unbegrenzte Ressourcen verfügen. Wenn sich herausstellt, dass ein JS-Interpreter zu wenig Adressen für seine Kosten liefert, wird er deaktiviert.
o0 '.

1
@Lohoris: Google gibt an, dass die durchschnittliche Ladezeit der Seite (2,45 s) und die durchschnittliche Seitengröße (320 KB) beträgt. Sie erhalten eine Vorstellung davon, wie viel Analyse Sie durchführen können. Während ein Download-Thread die Anforderungen ausführt, kann ein Parsing-Thread die Analyse durchführen. Die Mehrheit der Downloads wartet. Dies gibt dem dl-Thread die Möglichkeit, die Voraussetzungen zu überprüfen, bevor er an den Parser gesendet wird. ZB Rendering-Seite, indexOf ('@'), indexOf ('mailto:') usw. Der Parsing-Thread würde nur + -200 Zeichen um die Übereinstimmung erhalten, was ein so komplexes Parsing ermöglichen würde, dass es "unendlich" erscheint Begriffe der Analysekraft.
Jani Hyytiäinen

52

Ich sehe das ganz anders. Ich benutze dafür MailHide .

MailHide ist ein System von Google, bei dem der Nutzer einen reCAPTCHA-Test durchführen muss, um die E-Mail an ihn weiterzugeben.


15
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Showdev

5
Obwohl ich diesem Gefühl im Allgemeinen zustimme, besteht die Antwort in diesem Fall darin, ein bestimmtes Werkzeug zu verwenden. Wenn der Link nicht mehr angezeigt wird, lösche ich die Antwort.
Tvanfosson

Danke - Das ist großartig. Ich schreibe so etwas (enthüllen ist der Link): Senden Sie mir eine E-Mail: enthüllen
chrs

6
Beachten Sie, dass Google MailHide ab Match 2018 deaktiviert hat. Wie immer bei "kostenlosen" Google-Diensten: Sie bieten sie an, solange sie von den Daten profitieren können, und lassen sie fallen, sobald sie das bekommen, was sie benötigen. Das unzuverlässigste Unternehmen, das kostenlose Dienstleistungen anbietet. Ich würde mich von Google oder anderen Diensten fernhalten, wenn Sie sich auf das verlassen müssen, was Sie tun möchten.
Masi

51

Ursprünglich nicht meine Idee, aber ich kann den Autor nicht finden:

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

Fügen Sie so viele x hinzu, wie Sie möchten. Es funktioniert perfekt zum Lesen, Kopieren und Einfügen und kann von einem Bot nicht gelesen werden.


2
Ordentlich! Aber was ist mit mobilen Benutzern?
Bodzio

Mouseover werden auch ausgelöst, wenn Sie einen Link berühren. Es sollte gut funktionieren.
Andrew Swift

4
Funktioniert, solange Ihre Adresse keine x enthält. :-p Aber ich weiß, benutze einfach einen anderen Buchstaben.
Dan Henderson

1
Aber wenn Javascript deaktiviert ist, präsentieren Sie Benutzern eine nicht vorhandene Adresse, die zurückspringt und Sie als Kunden / Benutzer verliert.
Xeevis

34
Wenn Javascript deaktiviert ist, funktioniert keine meiner Websites überhaupt ;-)
Andrew Swift

16

Ich denke, die einzige narrensichere Methode, die Sie haben können, ist das Erstellen einer Kontaktseite, bei der es sich um ein Formular handelt, das an ein Skript gesendet wird, das an Ihre E-Mail-Adresse gesendet wird. Auf diese Weise wird Ihre Adresse niemals der Öffentlichkeit zugänglich gemacht. Dies mag aus irgendeinem Grund unerwünscht sein, aber ich denke, es ist eine ziemlich gute Lösung. Es ärgert mich oft, wenn ich gezwungen bin, die E-Mail-Adresse einer Person von ihrer Website auf meinen E-Mail-Client zu kopieren / einzufügen und ihnen eine Nachricht zu senden. Ich mache es lieber direkt über ein Formular auf ihrer Website. Mit diesem Ansatz können Sie auch anonyme Kommentare an Sie senden usw. Schützen Sie Ihr Formular nur mit einem Anti-Bot-Schema, z. B. einem Captcha. Es gibt viele davon, die hier auf SO diskutiert werden.


6
Das einzige Problem dabei ist, dass Sie keine Kopie der von Ihnen gesendeten Nachricht haben, es sei denn, Sie nehmen sich die Zeit, sie zu kopieren und an einer anderen Stelle einzufügen. Persönlich macht es mir nichts aus, zu kopieren und einzufügen, sondern für jeden das Richtige.
gvkv

6
Was den Absender betrifft, der keine Kopie hat: Für viele Arten von Formularen im Web liebe ich die Möglichkeit, selbst eine Kopie zu erhalten. Oft erlaubt eine solche Option jedoch Missbrauch, um anonym Nachrichten an nahezu jeden zu senden ...
Arjan

12
Dies kann Ihre E-Mail-Adresse verbergen, aber es wird den Spam überhaupt nicht stoppen, es sei denn, Sie sichern Ihr Formular mit einem Captcha-Bildvalidierungsskript.
SimonDowdles

1
Sie können das Problem auch lösen, dass der Absender keine Kopie hat, indem Sie eine Option hinzufügen, um diese ebenfalls an ihn zu senden.
Steinybot

1
Die Option "Kopie an sich selbst senden" - verwandelt das Formular effektiv in einen Spam-Kanon, mit Ihnen als Absender - schlechte Idee!
T4NK3R


10

Wenn Sie PHP-Unterstützung haben, können Sie so etwas tun:

<img src="scriptname.php">

Und die 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
Anstatt PHP zu verwenden, könnten Sie das Bild physisch erstellen. Und wie beim CSS-Invertieren haben Sie immer noch das Problem, dass Sie nicht anklickbar sind und nur mit einem Stift kopiert werden können: P
Claudiu

9

Ich weiß, dass meine Antwort vielen nicht gefallen wird, aber bitte beachten Sie die hier beschriebenen Punkte, bevor Sie nach unten blättern.

Alles, was leicht maschinenlesbar ist, ist für die Spammer leicht maschinenlesbar. Obwohl ihre Handlungen uns dumm erscheinen, sind sie keine dummen Menschen. Sie sind innovativ und einfallsreich. Sie verwenden nicht nur Bots, um E-Mails zu sammeln, sie verfügen auch über eine Vielzahl von Methoden und bezahlen außerdem einfach für gute neue Listen von E-Mails. Das bedeutet, dass sie weltweit Tausende von Black-Hat-Hackern dazu gebracht haben, ihre Jobs auszuführen. Leute, die bereit sind, Malware zu codieren, die die Bildschirme der Browser anderer Leute abkratzt, was schließlich jede Methode, die Sie erreichen möchten, unbrauchbar macht. Dieser Thread wurde bereits von mehr als 10 solchen Leuten gelesen und sie lachen über uns. Einige von ihnen langweilen sich vielleicht sogar zu Tränen, um herauszufinden, dass wir ihnen keine neue Herausforderung stellen können.

Denken Sie daran, dass Sie nicht versuchen, Ihre Zeit zu sparen, sondern die Zeit anderer. Aus diesem Grund sollten Sie hier etwas mehr Zeit verbringen. Es gibt keine einfach auszuführende magische Kugel, die funktionieren würde. Wenn Sie in einem Unternehmen arbeiten, das E-Mails von 100 Personen auf der Website veröffentlicht, und Sie 1 Spam-E-Mail pro Tag und Person reduzieren können, handelt es sich um 36500 Spam-E-Mails pro Jahr. Wenn das Löschen solcher E-Mails durchschnittlich 5 Sekunden dauert, sprechen wir von 50 Arbeitsstunden pro Jahr. Ganz zu schweigen von der reduzierten Belästigung. Warum also nicht ein paar Stunden damit verbringen?

Es sind nicht nur Sie und die Personen, die die E-Mail erhalten, die Zeit als Aktivposten betrachten. Daher müssen Sie einen Weg finden, die E-Mail-Adressen so zu verschleiern, dass es sich nicht auszahlt, sie zu knacken. Wenn Sie eine weit verbreitete Methode verwenden, um die E-Mails zu verschleiern, lohnt es sich wirklich, sie zu knacken. Infolgedessen erhält der Cracker Tausende, wenn nicht Zehntausende oder Hunderttausende frische E-Mails. Und für sie werden sie Geld bekommen.

Also, mach weiter und codiere deine eigene Methode. Dies ist ein seltener Fall, in dem es sich wirklich auszahlt, das Rad neu zu erfinden. Verwenden Sie eine Methode, die nicht maschinenlesbar ist und die vorzugsweise eine Benutzerinteraktion erfordert, ohne die Benutzererfahrung zu beeinträchtigen.

Ich habe ungefähr 20 Minuten damit verbracht, ein Beispiel für das, was ich meine, abzuschreiben. In diesem Beispiel habe ich KnockoutJS einfach verwendet, weil es mir gefällt und ich weiß, dass Sie es wahrscheinlich nicht selbst verwenden werden. Aber es ist trotzdem irrelevant. Es ist eine benutzerdefinierte Lösung, die nicht weit verbreitet ist. Das Knacken stellt keine Belohnung dafür dar, da die Methode nur auf einer einzigen Seite im riesigen Internet funktioniert.

Hier ist die Geige: http://jsfiddle.net/hzaw6/

Der folgende Code ist kein Beispiel für guten Code. Aber nur ein kurzes Beispiel für Code, der für die Maschine sehr schwer herauszufinden ist, wir bearbeiten hier sogar E-Mails. Und selbst wenn es möglich wäre, würde es sich nicht auszahlen, in großem Maßstab ausgeführt zu werden.

Und ja, ich weiß, dass es unter IE = lte8 nicht funktioniert, weil 'Eigenschaftsattribute' mit undefinierter oder Nullreferenz nicht abgerufen werden können ', aber es ist mir einfach egal, weil es nur eine Demo der Methode ist, keine tatsächliche Implementierung. und nicht für die Produktion vorgesehen, wie es ist. Fühlen Sie sich frei, Ihre eigenen zu codieren, die cooler, technisch solider usw. sind.

Oh, und niemals einen Namen oder eine E-Mail in HTML oder Javascript nennen. Es ist einfach viel zu einfach, das DOM und das Fensterobjekt nach E-Mails oder E-Mails zu durchsuchen und zu überprüfen, ob sie etwas enthalten, das mit einer E-Mail übereinstimmt. Aus diesem Grund möchten Sie niemals Variablen, die E-Mails in voller Form enthalten, und aus diesem Grund möchten Sie, dass der Benutzer mit der Seite interagiert, bevor Sie solche Variablen zuweisen. Wenn Ihr Javascript-Objektmodell E-Mail-Adressen im DOM-Bereitschaftsstatus enthält, setzen Sie diese den Spammern aus.

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

Die 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

Eine meiner Lieblingsmethoden ist es, die E-Mail-Adresse mit PHP zu verschleiern. Ein klassisches Beispiel ist die Konvertierung der Zeichen in HEX-Werte wie folgt:

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

Und dann werde ich es in meinem Markup einfach wie folgt nennen:

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

Dann untersuchen Sie Ihre Quelle, Sie werden angenehm überrascht sein!


Das ist ein schönes Beispiel. Vielen Dank. Gibt es Hinweise auf SpamBots mit HEX-Decodierung?
Jasonflaherty

7

Sie können versuchen, Zeichen mithilfe von HTML-Entitäten in Hexa auszublenden (Beispiel: & # x40 für @). Dies ist eine bequeme Lösung, da ein korrekter Browser sie übersetzt und Sie einen normalen Link haben können. Der Nachteil ist, dass ein Bot es theoretisch übersetzen kann, aber es ist ein bisschen ungewöhnlich. Ich benutze dies, um meine E-Mail in meinem Blog zu schützen.

Eine andere Lösung besteht darin , Javascript zu verwenden, um einen Teil der Adresse zusammenzusetzen und die Adresse im laufenden Betrieb zu dekodieren. Der Nachteil ist, dass ein Browser mit deaktiviertem Javascript Ihre Adresse nicht anzeigt.

Die effektivste Lösung ist die Verwendung eines Bildes , aber es ist für den Benutzer ein Problem, die Adresse von Hand kopieren zu müssen.

Ihre Lösung ist ziemlich gut , da Sie nur für Benutzer, bei denen Javascript deaktiviert ist, einen Nachteil hinzufügen (das @ manuell schreiben). Sie können auch sicherer sein mit:

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

5

Spambots werden dies nicht interpretieren, da es sich um eine weniger bekannte Methode handelt :)

Definieren Sie zunächst das CSS:

email:before {
    content: "admin";
}

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

Fügen Sie jetzt, wo immer Sie Ihre E-Mail anzeigen möchten, einfach den folgenden HTML-Code ein:

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

Und Tada!


Dies funktioniert, unterstützt jedoch kein Kopieren und Einfügen, was die Benutzerfreundlichkeit für die meisten Benutzer beeinträchtigen kann
Iruku Kagika,

4

Ich verwende eine sehr einfache Kombination aus CSS und jQuery, die dem Benutzer die E-Mail-Adresse korrekt anzeigt und auch funktioniert, wenn auf den Anker geklickt oder der Mauszeiger bewegt wird:

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);
});

Hier ist ein Arbeitsbeispiel.


Wird der korrekte Wert von href in der Browser-Statusleiste angezeigt, wenn der Mauszeiger über den Link bewegt wird?
Nik O'Lai

Ja, es wird der korrekte Wert von href angezeigt, wenn der Mauszeiger über den Link bewegt wird. Aus diesem Grund muss die jQuery-Methode .hover implementiert werden.
Sergiu

Leider wird der korrekte Wert von href nicht angezeigt, zumindest wenn Sie das erste Mal mit der Maus über den Link fahren (es ist me@example.spam). Beim zweiten Schwebeflug war alles in Ordnung. Testen Sie es mit Ihrem eigenen Link.
Nik O'Lai

1
Es funktioniert in Chrome und IE. Scheint nur bei Firefox, beim ersten Hover wird die Statusleiste nicht aktualisiert. Ich werde versuchen, eine Lösung für Firefox zu finden.
Sergiu

1
Ich verstehe, ich verstehe, ich mag diesen wirklich.
Eric Bishard

3

! - Wenn Sie dies als Referenz hinzufügen, wissen Sie nicht, wie veraltet die Informationen sein könnten, aber es handelt sich um einige einfache Lösungen, für die keine Skripte erforderlich sind

Nachdem ich selbst danach gesucht hatte, stieß ich auf diese Seite, aber auch auf diese Seiten:

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

Versuchen Sie, die E-Mail-Adresse umzukehren

Beispiel für einfaches HTML:

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

Der gleiche Effekt mit CSS

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

Wenn Sie dies mit einer der zuvor genannten Methoden kombinieren, wird es möglicherweise sogar effektiver


3

Eine einfache Lösung besteht darin, HTML-Entitäten anstelle von tatsächlichen Zeichen zu verwenden. Zum Beispiel wird "me@example.com" konvertiert 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
Versuchen Sie google.se/search?q=HTML+entities+converter , der Sie beschäftigen sollte;)
grapefrukt

1
Google kann Ihnen viele Seiten dafür finden. Ein Beispiel: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
Aber konnte ein Bot das nicht auch so einfach wiedergeben?
gigantisch

20
Autsch, das Beispiel me @ stack ... sollte besser als me@example.com, me@example.net oder me@example.org geschrieben werden - dies sind die einzigen Domainnamen, die Nicht-Eigentümer in Beispielen verwenden sollten!
Arjan


3

Hier ist meine Arbeitsversion:


Erstellen Sie irgendwo einen Container mit einem Fallback-Text:

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

Fügen Sie am unteren Rand des DOM (für das Rendering) den folgenden Ausschnitt hinzu:

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

Der generierte Hyperlink wird dem angegebenen Container hinzugefügt:

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

Außerdem gibt es hier eine minimierte Version:

<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

Die beste Methode zum Ausblenden von E-Mail-Adressen ist nur dann gut, wenn der Bot-Programmierer diese "Codierung" entdeckt und einen Entschlüsselungsalgorithmus implementiert.

Die JavaScript-Option funktioniert nicht lange, da viele Crawler JavaScript interpretieren.

Es gibt keine Antwort, imho.


Gibt es Crawler, die JavaScript interpretieren? Meine einzige JavaScript-Codierungsmethode schien in den letzten Jahren für mich gut zu funktionieren - meine Spam-Rate war ziemlich konstant ~ 4 / Woche, daher habe ich mir keine Sorgen um die Adressen anderer Personen gemacht, die ich dieser Methode anvertraut habe. Sollte ich?
Kev

Sicher, es kann viele Crawler ausschließen, aber ich, wenn ich einen
Adresscrawler erstellen

mehr Aufwand als Sie vielleicht denken
anonymer Feigling

Google kriecht jetzt durch einige JS.
Alister Bulman

2

Es gibt wahrscheinlich Bots, die die [at]und andere Verkleidungen als @Symbol erkennen. Dies ist also keine wirklich effektive Methode.

Sicher könnten Sie einige Codierungen wie URL-Codierung oder HTML-Zeichenreferenzen (oder beides) verwenden:

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

Da es jedoch legal ist, sie zu verwenden, sollte jeder Browser / E-Mail-Client auch diese Codierungen verarbeiten.


Völlig einverstanden, Spammer sind "clevere" Leute, nach Jahren, in denen Leute [at] oder [dot] anstelle der Syntax hinzugefügt haben, werden sie natürlich Algorithmen haben, die diese Muster aufgreifen.
SimonDowdles

Was ist mit der Dekodierung dieser HEX-Werte?
Jasonflaherty

2

Ich bin ein Fan von SpamSpan - es ist verschleiert, aber immer noch entzifferbar, wenn JS deaktiviert ist. Es scheint auch zu funktionieren, obwohl ich es erst seit ungefähr einem Jahr auf einer Website mit wenig Verkehr verwende.

Es gibt auch ein Modul für Drupal, mit dem E-Mails automatisch in SpamSpans umgewandelt werden können, falls Sie eines benötigen.


1

Funktioniert es, wenn ich mit der rechten Maustaste auf den Link klicke und "URL kopieren" wähle? Wenn nicht, ist dies keine ideale Situation (ich klicke sehr selten auf einen Mailto-Link und bevorzuge es, die E-Mail-Adresse zu kopieren und in meine E-Mail-Anwendung einzufügen oder wo immer ich sie zu einem bestimmten Zeitpunkt benötige).

Früher war ich ziemlich paranoid, meine E-Mail-Adresse online zu schützen (UseNet, Web und dergleichen), aber heutzutage vermute ich, dass tatsächlich mehr "mögliche Ziele für Spam" generiert werden, die lokale Teile programmgesteuert mit Domänen abgleichen. Ich stütze mich darauf, dass ich gelegentlich meine Mailserver-Protokolle durchgesehen habe. Es gibt in der Regel einige Übermittlungsversuche an nicht vorhandene Adressen (einschließlich abgeschnittener Versionen von Spam-Ködern, die ich Ende der 90er Jahre auf UseNet baumelte, als das Scraping von Adressen sehr verbreitet war).


1

Nachdem ich so viele Techniken angewendet hatte, fand ich einen einfachen und sehr freundlichen Weg. Die Bots suchen nach @ Símbolo und vor kurzem suchen sie nach [at] ant seiner Variation, also verwende ich 2 Techniken

  1. Ich schreibe meine E-Mail auf ein Bild, wie es die Domaintolls verwenden und es funktioniert perfekt oder
  2. das Símbolo (@) durch ein Bild davon wie zu ersetzen

@ ersetzen und das Bild alt ist alt = "@", so dass der Bot ein Bild findet und jeder Mensch es als normale Adresse sieht. Wenn er es kopiert, kopiert er die E-Mail und der Job ist don, so dass der Code sein wird

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


1

Zuerst würde ich sicherstellen, dass die E-Mail-Adresse nur angezeigt wird, wenn Sie Javascript aktiviert haben. Auf diese Weise gibt es keinen einfachen Text, der ohne Javascript gelesen werden kann.

Zweitens besteht eine Möglichkeit zur Implementierung einer sicheren Funktion darin, sich von der <button> Tag . Dieses Tag muss zwischen den Tags eingefügt werden, damit es vom Computer gelesen werden kann. Versuchen Sie stattdessen das <input type="button">mit einem Javascript-Handler für einen onClick. Verwenden Sie dann alle von otherse genannten Techniken, um eine sichere E-Mail-Notation zu implementieren.

Eine andere Möglichkeit ist eine Schaltfläche mit "Klicken, um die E-Mail-Adresse anzuzeigen". Nach dem Klicken ändert sich dies in eine codierte E-Mail (die Zeichen in HTML-Codes). Bei einem weiteren Klick wird die Funktion "mailto: email" weitergeleitet

Eine nicht codierte Version der letzten Idee mit auswählbaren und nicht auswählbaren E-Mail-Adressen:

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

Sehen Sie, ob Sie dies möchten, und kombinieren Sie es mit den Ideen anderer. Sie können nie zu sicher sein.


2
oh schau - me@domain.extension - da ist die Klartext-E-Mail-Adresse.
Alister Bulman

1

Und meine Funktion. Ich habe es mit Blick auf die Antworten in diesem Thema erstellt.

 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;
    }

Es werden zwei Methoden verwendet: Dir von rechts nach links und Javascript-Putting.


1

Option 1: Teilen Sie die E-Mail-Adresse in mehrere Teile auf und erstellen Sie aus diesen Teilen ein Array in JavaScript. Verbinden Sie diese Teile als Nächstes in der richtigen Reihenfolge und verwenden Sie die Eigenschaft .innerHTML, um die E-Mail-Adresse zur Webseite hinzuzufügen.

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

Option 2: Verwenden Sie Bild anstelle von E-Mail-Text

Bildersteller-Website aus Text: http://www.chxo.com/labelgen/

Option 3: Wir können AT anstelle von "@" und DOT anstelle von "verwenden".

dh:

 info(AT)XXXabc(DOT)com 

1
Ich denke, Option 1 ist keine gute Option. Ein Parser, der neben einem Bot ausgeführt wird, kann den Wert von innerHTML leicht herausfinden, und Option 3 ist wahrscheinlich auch nicht so gut, weil ein intelligenter Bot es herausfinden könnte. Ich denke, Option 2 ist die beste.
John Sonderson

1

Ich mag es nicht, wenn JavaScript und HTML gemischt werden, deshalb verwende ich diese Lösung. Für mich funktioniert es vorerst gut.

Idee : Sie könnten es komplizierter machen, indem Sie verschlüsselte Informationen in den dataAttributen bereitstellen und diese im JS entschlüsseln. Dies geschieht einfach durch Ersetzen oder Umkehren von Buchstaben.

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')
        );
    });  
});

Probieren Sie es aus: http://jsfiddle.net/x6g9L817/


1

Was ist mit HTML_CHARACTER?:

joe&#064;mail.com

Ausgänge

joe@mail.com

1
Die E-Mail-Adresse kann auf diese Weise nicht angeklickt werden, und die Platzierung des @ -Symbols ist nicht kugelsicher, da es nicht immer so aussieht wie bei einer Inline-Platzierung.
Brent O'Connor

0

Hier ist eine einfache Lösung für dieses Problem:

<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

Die Antwort von ofaurax gefällt mir am besten, aber ich würde sie für eine etwas verstecktere E-Mail ändern:

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

0

Ich muss nur eine andere Antwort geben. Ich habe mir gerade etwas ausgedacht, mit dem es Spaß macht, zu spielen.

Ich fand heraus, dass in vielen gängigen Zeichentabellen die Buchstaben @ und az mehrmals vorkommen. Sie können die ursprünglichen Zeichen den neuen Zuordnungen zuordnen und es Spam-Bots erschweren, herauszufinden, um welche E-Mail es sich handelt.

Wenn Sie die Zeichenfolge durchlaufen und den Zeichencode eines Buchstabens abrufen, dann 65248 hinzufügen und eine HTML-Entität basierend auf der Nummer erstellen, erhalten Sie eine lesbare E-Mail-Adresse.

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) + ';');
});

Hier ist eine funktionierende Geige: http://jsfiddle.net/EhtSC/8/

Sie können diesen Ansatz verbessern, indem Sie einen vollständigeren Satz von Zuordnungen zwischen Zeichen erstellen, die gleich aussehen. Wenn Sie beispielsweise die E-Mail in den Editor kopieren / einfügen, erhalten Sie viele Felder.

Um einige Probleme mit der Benutzererfahrung zu lösen, habe ich die E-Mail als Link erstellt. Wenn Sie darauf klicken, werden die Zeichen wieder ihren Originalen zugeordnet.

Um dies zu verbessern, können Sie bei Bedarf komplexere Zeichenzuordnungen erstellen. Wenn Sie mehrere Zeichen finden, die beispielsweise anstelle von 'a' verwendet werden können, können Sie diese nicht zufällig zuordnen.

Wahrscheinlich nicht der sicherste Ansatz aller Zeiten, aber ich hatte wirklich Spaß daran herumzuspielen: D.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.