2009-03-30 2 views
10

Ich versuche, einen JavaScript-E-Mail-Obfuscator zu entwickeln, um die Wahrscheinlichkeit von Spam in E-Mails zu reduzieren, die auf einer Website aufgeführt sind. Im Moment habe ich einen JavaScript-basierten Obfuscator, der eine Kombination von HTML-Kodierung & JavaScript verwendet, um eine verschleierte E-Mail transparent in eine normale E-Mail umzuwandeln.Guter, nicht aufdringlicher Anti-Spam-E-Mail-Obfuscator?

Was ich tue, ist dies:

Format der "mailto:" Teil der href in Links HTML wie codiert werden:

mailto: 

I kodieren auch die E-Mail, Ersetzen des @ Zeichen mit (a), so dass die E-Mail etwas liest sich wie:

stackoverflow(a)example.com 

ich dann einige JavaScript verwenden, um alle mailto-Links zu entschlüsseln, die diesehabenMelden Sie sich in der E-Mail an und konvertieren Sie sie beim Laden der Seite in @.

Das funktioniert ziemlich gut. Für Leute, die Browser mit aktiviertem JavaScript verwenden, sehen sie, dass alles normal funktioniert. Für Personen ohne JavaScript aktiviert jeder E-Mail-Client, den ich kenne, die E-Mail-Adresse als ungültig, der Benutzer sollte jedoch in der Lage sein, zu schließen, was zur Korrektur des Symbols erforderlich ist.

Ich frage mich, ob es eine bessere (weniger aufdringlich (oder im besten Fall nicht sehr aufdringlich), aber mehr Spam-resistente) Art und Weise der Verschleierung von E-Mails auf einer Webseite gab.

Wie bei jeder Art von Verschleierung, wenn ein Mensch oder Computer kann es leicht ent-obskuszieren, dann könnte ein Spammer leicht das gleiche tun. Aus diesem Grund erwarte ich keine narrensichere Verschleierung, aber ich war neugierig, welche anderen Vorschläge da draußen waren. Google hat keine Lösungen gefunden, die ich für besser halte als meine aktuelle Lösung. Ich habe mich gefragt, ob es noch andere gute Alternativen gibt.

+0

Pflege Diese Seite Dan zu überdenken und eine Antwort markieren als angenommen? Scotts Antwort hat für mich funktioniert. – Gray

Antwort

0

Eine Möglichkeit, die E-Mail für einen Computer zu verschleiern, wäre, die E-Mail als Bild und nicht als Text zu schreiben. Auf diese Weise ist es für einen Menschen immer noch einfach, die E-Mail-Adresse zu lesen und ziemlich schwer für einen Computer.

Wie von Steve Gilham angegeben, ist es nicht so schwer, die E-Mail mit OCR zu erhalten. Und nur Textbrowser unterstützen sie nicht. Daher ist Scotts Lösung wahrscheinlich die beste Lösung.

7

Ich habe HiveLogic Enkoder in der Vergangenheit mit ziemlich gutem Erfolg verwendet. Wenn überhaupt, sollten Sie sich die Funktionsweise von Dans Codierung ansehen, da diese Ihnen vielleicht ein paar Ideen geben könnte, um einen noch robusteren Obfuscator zu erstellen.

0

Ich habe diesen Generator http://www.wbwip.com/wbw/emailencoder.html Service für eine Weile verwendet und es funktioniert super. Ich verwende normalerweise Teile der kodierten Adresse und Teile, die nicht codiert sind.

Zum Beispiel ...

[email protected] == user@po.com

ich ...

[email protected] ändern könnte Wenn Sie == user@po.com

1

wirklich wollen E-Mail-Adressen zu schützen gibt es keine andere Möglichkeit, dann Bilder für Nicht-JavaScript-Benutzer zu generieren.
habe ich so etwas wie dieses verwenden:

<script type="text/javascript"> 
//<![CDATA[ 
    scrambler('[email protected]||mo'); 
//]]> 
</script> 
<noscript> 
    <img src="[email protected]||mo" alt="Emailadresse" /> 
</noscript> 

scramble ist eine sehr einfache JavaScript-Funktion, ich glaube, Sie könnten sich leicht ausrechnen, was es tut. (Es wird ergeben: <a href="mailto:[email protected]">[email protected]</a>) scrambler.php ist das gleiche, außer in PHP und einem Gd-Backend, um Bilder zu generieren.

Stellen Sie etwas heraus, das nicht über einige codingtricks ist oder etwas durch etwas anderes ersetzt.

EDIT: Hier ist meine algo:

function scrambler (text) { 
    parts = text.split("||"); 
    var reverse = function (s) { 
    var ret =''; 
    for (var i=s.length-1;i>=0;i--) 
     ret+=s.charAt(i); 
    return ret; 
    } 
    text = reverse(parts[0])+reverse(parts[1]); 
    document.write(text); 
}