2017-09-05 2 views
0

Ich bin dynamisch mehrere E-Mail-Adressen (Mail zu:) auf einer Webseite.mit regulären Ausdruck, um E-Mail-Adresse vor Spam-Bots zu verbergen

Ich muss sie unbedingt vor Spam-Bots verbergen.

die einfachste Lösung, die ich found is this:

<a href="mailto:[email protected]" onmouseover="this.href=this.href.replace(/x/g,'');">link</a> 

Dies beinhaltet ein gefälschtes Zeichen setzen: „X“ in der E-Mail-Adresse und diese dann zu entfernen, wenn der Link klicken, kopiert oder eingefügt werden.

es funktioniert - aber der Nachteil ist, dass es alle "x" von der Adresse entfernen. da ich nicht garantieren kann, dass meine dynamisch gerenderten E-Mails nicht "x" diese Lösung enthalten - wie es ist, ist es nicht richtig für mich.

wäre eine bessere Lösung zu Beginn/Ende jeder E-Mail-Adresse zu setzen 3 oder mehr ‚X‘ sein und dann den obigen Code, sie zu entfernen, sobald der Link

dh geklickt wird:

<a href="mailto:[email protected]" 
onmouseover="this.href=this.href.replace(/x/g,'');">link</a> 

, was ich jetzt tun müssen, ist für reguläre Ausdrücke entfernen sie dann die ersten 3 ‚x‘ aus der E-Mail-Adresse verwenden, wenn seine

geklickt

i die unten versucht, aber es hat nicht funktioniert:

<a href="mailto:[email protected]" 
onmouseover="this.href=this.href.replace(^[\s\S]{0,3});">link</a> 
+1

Regel für diesen Zweck hilft, werden selten verwendeten Symbole hinzugefügt. Oder eine sehr ungewöhnliche Zeichenfolge. 'x' ist ziemlich häufig, oder? –

+0

_ "Ich muss sie unbedingt vor Spam-Bots verstecken" _ - Unsinn. Spammer _will_ bekommen die Adresse früher oder später - aus der Kontaktliste von jemand anderem, den sie gehackt haben, indem sie einfach raten, ... Heutzutage sollte man in einen richtigen Spamfilter investieren, nicht in unsinnige Maßnahmen wie diese (was die ganze Sache ausmacht unzugänglich, wenn zB ein Benutzer mit JS deaktiviert ist, um es zu bekommen.) – CBroe

+0

ja CBroe. Keine Methode ist absolut kugelsicher. Alles, was wir zu tun versuchen, ist die Reduzierung der Anzahl von Angriffen - Spam-Filter werden tatsächlich bereitgestellt. aber es lohnt sich immer noch einen Front-End-Filter – theSeeker

Antwort

0

Die replace Methode erwartet zwei Parameter - zuerst die regex Sie Matching mit, und zweitens den Wert, mit dem Sie Matches ersetzen möchten. Es wird auch erwartet, dass Ihr Regex-Muster Flags hat, um das Verhalten von Übereinstimmungen zu erklären. Zum Beispiel passt g über die Zeichenkette, mit der es arbeitet, global an, und i passt in Groß- und Kleinschreibung.

Die Regex Sie nach hier sind wahrscheinlich entlang der Linien von mehr sein:

^(mailto\:)x{3}(.*)x{3}$ 

Das heißt, Sie sind mit dem Ziel mailto:, zu erfassen, die zu Beginn der Zeichenfolge erwartet wird, dann Verwerfen 3 x oder X Zeichen, gefolgt von der Erfassung der E-Mail-Adresse, aber nicht die 3 x oder X Zeichen, die am Ende der Zeichenfolge erwartet werden.

Dies würde passen in die replace Methode auf folgende Weise:

.replace(/^(mailto\:)x{3}(.*)x{3}$/i, '$1$2') 

Das heißt, es wäre nicht fair zu sagen, dass eine E-Mail-Adresse geneigt sein könnte x oder X Zeichen nacheinander aufzunehmen?In diesem Fall sollten Sie jedes Vorkommen von x{3} und die entsprechenden Übereinstimmungen, die Sie der E-Mail-Adresse voranstellen/anhängen, durch etwas ersetzen, das weniger wahrscheinlich in einer E-Mail-Adresse enthalten ist, oder eine alternative Herangehensweise an das Problem entwickeln.

+0

Hallo Charles. Ich habe es versucht, aber es funktioniert nicht. Hier ist mein Code: link theSeeker

+0

Ich entschuldige mich, ich wollte Zitate verwenden, um das zweite Argument von 'ersetzen 'zu umgeben. Ich habe die Lösung entsprechend bearbeitet. –

+0

danke Charles-gute Arbeit! – theSeeker

0

Sie etwas versuchen könnte nach dem Vorbild der

<a href="mailto:^$^[email protected]^$^" onmouseover="this.href=this.href.replace(/[\^][\$][\^]/g,'');">link</a> 

Es wäre ersetzen grundsätzlich die Vorkommen von ^$^ anstatt etwas gemeinsam als X oder XXX

0

Ich würde vermeiden, mehr oder weniger häufige Zeichen in Ihrer Mail-Adresse für die Verschleierung Zwecke hinzufügen. Eher versuchen Sie eine Art von sehr Grundverschlüsselung, wie zum Beispiel das Umschalten der Bits oder die Zeichenfolge Char von Char, und die Erhöhung der Char-Code um einen festen Wert.
Beispiel:

var mailto = "mailto:[email protected]"; 
var obfuscated = ""; 
for (let i = 0; i < mailto.length; i++) { 
    obfuscated += String.fromCharCode(mailto.charCodeAt(i) + 7); 
} 
//obfuscated now looks like this: "thps{vAjvu{hj{Gkvthpu5jvt" 
//to reverse the process, do the same thing and subtract 7. 
//You could extract the code to a method that you simply call with "onmouseover" 

Hope this, obwohl sie nicht gerade die Beantwortung Ihrer Frage :)

Verwandte Themen