Najlepszy sposób na zaciemnienie adresu e-mail w witrynie internetowej?

136

Przez ostatnie kilka dni pracowałem nad aktualizacją mojej osobistej strony internetowej. Adres URL mojej osobistej witryny internetowej to (moje imię). (Moje nazwisko) .com, ponieważ moje nazwisko jest raczej nietypowe i miałem szczęście odebrać nazwę domeny. Mój adres e-mail to (moje imię) @ (moje nazwisko) .com. Więc tak naprawdę, jeśli chodzi o zgadywanie, nie jest to zbyt trudne.

W każdym razie chcę zintegrować mailto: link z moją witryną, aby ludzie mogli się ze mną kontaktować. I pomimo tego, że mój adres e-mail nie jest zbyt trudny do odgadnięcia, wolałbym, aby nie był on przechwytywany przez roboty spamujące, które po prostu przeszukują strony internetowe w poszukiwaniu wzorców adresów e-mail i dodają je do swojej bazy danych.

Jaki jest najlepszy sposób na zaciemnienie adresu e-mail, najlepiej w formie linków? Metody, które znam, to:

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

To działa, ale oznacza również, że gdy tylko moja witryna trafi do Google, będę przedzierać się przez spam, ponieważ roboty spamujące z łatwością wykrywają mój adres e-mail.

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

Jest to mniej pożądane, ponieważ odwiedzający nie tylko nie będą mogli kliknąć go, aby wysłać mi e-mail, ale sprytniejsze roboty spamujące prawdopodobnie będą w stanie wykryć znaki, które zawiera obraz.

Wiem, że prawdopodobnie nie ma idealnego rozwiązania, ale zastanawiałem się tylko, co wszyscy uważają za najlepsze. Zdecydowanie jestem skłonny użyć JavaScript, jeśli to konieczne, ponieważ moja strona internetowa już korzysta z niego.

Adam Rezich
źródło
10
Prześlij wiadomość na swoje konto Gmail. ;-)
Dave Jarvis
1
Zobacz pytanie
jacktrades
Link do tego posta powinien być tutaj.
Clément

Odpowiedzi:

106

Koduję znaki jako encje HTML ( coś takiego ). Nie wymaga włączonego JS i wydaje się, że zatrzymał większość spamu. Przypuszczam, że sprytny bot może nadal go zbierać, ale nie miałem żadnych problemów.

chroder
źródło
6
Zatrzymuje to najprostszy rodzaj zbierania spamu (wyrażenie regularne szukające dowolnego tekstu podobnego do adresu e-mail) i nie ma żadnych wad: jest tak samo wygodne dla użytkownika końcowego, jak link explict href = mailto: xxx @ yy.
Stephen C. Steel
5
Działa to całkiem nieźle, ponieważ wiele (większość?) Gąsienic / kombajnów jest niesamowicie głupich.
Jacco
43
Według tego badania empirycznego z 2008 r. , Kodowanie adresów URL było drugim po najmniej skutecznym. Tylko zwykły tekst był gorszy.
Fuhrmanator
16
Wiem, że to późno, ale warto zauważyć, że sugestia dotyczyła tutaj użycia encji HTML, które różnią się od kodowania adresów URL. Według tego badania używanie encji dla okresów @ i było drugą najbardziej efektywną metodą (najskuteczniejsze były trzy metody powiązane z pierwszą, z których wszystkie skutkowały 0 wiadomościami spamowymi). Byłoby interesujące zobaczyć, czy to nadal trwa prawie 6 lat później.
Bailey Parker
12
Uważam za ironię, że aby chronić swój e-mail, musisz wpisać go w losowym, podejrzanym formularzu na stronie, do której masz link. Honeypotting, ktoś? :)
srobinson
84

Osobiście zrezygnowałem z ukrywania adresu e-mail. Łatwiej jest mi przyjrzeć się lepszym rozwiązaniom do filtrowania spamu, niż martwić się o zaciemnianie. Możesz spędzić całe dni próbując znaleźć najlepszy sposób na zaciemnienie adresu, a wtedy wystarczy jedna osoba, aby sprzedać Twój adres spamerowi i cała ta praca była bezużyteczna.

Chad Birch
źródło
Bez względu na to, jak dobre jest twoje filtrowanie spamu, będą fałszywe negatywy (wiadomości, które przez to przechodzą, nie powinny). Ostatecznie musisz żyć z adresem e-mail, ale wydaje się, że tego rodzaju niepotrzebne ujawnienie zwiększyłoby powtarzalność przedostawania się spamu.
Brad Barker,
8
@Brad z mojego doświadczenia wynika, że ​​tak nie jest. Używam poczty hostowanej przez Google dla moich domen, a mój adres e-mail jest niezwykle łatwy do znalezienia. Odkąd zacząłem go używać ponad 14 miesięcy temu, miałem 0 fałszywie negatywnych i 1 fałszywie pozytywny wynik. Dostaję kilkaset spamów dziennie w moim folderze ze spamem.
Rex M
8
Eee, powinienem dodać: spam nie jest boogeymanem, który zjada twoje dzieci. Otrzymanie dziwnego spamu to nie koniec świata. Kliknij „zgłoś spam” i przejdź dalej.
powiek
1
@Brad: Jeśli to niepotrzebne, w ogóle nie podawaj swojego adresu. Jeśli konieczne jest podanie adresu, przygotuj się na spam. Nie możesz ułatwić człowiekowi wysłania do Ciebie wiadomości e-mail bez ułatwienia zrobienia tego spambotowi.
Chuck,
1
Po prostu wysyłam również mój e-mail bez zaciemnienia. Używam Gmaila i wydaje mi się, że filtr spamu działa wyjątkowo dobrze.
Asmor
68

Obecnie akceptowanym rozwiązaniem jest utworzenie formularza kontaktowego, który umożliwia użytkownikom wysyłanie wiadomości e-mail. Jeśli dostaniesz z tego dużo spamu (nie ma mnie na mojej stronie), możesz dodać captcha dla dokładności i będziesz daleko od "nisko wiszącego owocu" w tym momencie.

Faktem jest, że jeśli podajesz link, który użytkownik może kliknąć, aby otworzyć swojego klienta poczty e-mail z Twoim adresem w polu Do:, to komputer jest w stanie odszyfrować adres e-mail ze strony i tak samo może bot spamujący.

JoshJordan
źródło
2
Oznacza to, że logika wysyłania wiadomości e-mail powinna być zapisana w ukrytym kodzie po stronie serwera, aby adres nigdy nie był upubliczniany.
JoshJordan,
8
Chociaż jest to dobre rozwiązanie, technicznie rzecz biorąc, jest to rozwiązanie zniechęcające wielu użytkowników. Tylko mówię'.
powiek
Masz całkowitą rację, ale nigdy nie rozumiałem dlaczego. Co najwyżej, jesteś jednym kliknięciem z formularza internetowego, jak można byłoby się minimum z klienta e-mail. Jedyną rzeczą, która zwiększa poziom trudności, jest opcjonalna captcha. Jeśli użytkownik nie może przez to przejść, aby się z Tobą skontaktować, czy jego wiadomość była ważna?
JoshJordan,
15
Zawsze lubię, gdy istnieje możliwość przekazania Ci wiadomości. Jedyną rzeczą, która przeszkadza mi w formularzach kontaktowych, jest to, że nie pozostawia żadnych zapisów w moim własnym systemie e-mailowym. (Chociaż formularz, który obsługuje każdy adres e-mail, może stworzyć własny zestaw problemów.)
Sam Hasler
6
Nic też nie wskazuje na to, że formularz e-mail faktycznie zadziałał. Widziałem zbyt wiele zepsutych po cichu. Przynajmniej prawdziwe e-maile odbijają się.
Brian Carper
44

Wspomniałeś, że to jest dla twojej osobistej strony internetowej. Na mojej osobistej stronie (na przykład bobsomers.com) mam po prostu akapit, który mówi tak:

Najlepszym sposobem na skontaktowanie się ze mną przed uruchomieniem nowej witryny jest wysłanie mi e-maila. Mój adres e-mail to moje imię na tej stronie. Jeśli nie możesz tego zrozumieć na podstawie tej wskazówki, cóż, e-mail może być większym wyzwaniem niż ustalenie mojego adresu.

Wydaje się, że ludzie są w stanie to zrozumieć, ponieważ cały czas otrzymuję wiarygodne e-maile. Czasami najlepsze rozwiązania nie wymagają pisania żadnego kodu. :)

Bob Somers
źródło
7
Ta metoda odfiltrowuje również osoby z IQ niższym niż określony poziom: D
papa zulu
36

reCAPTCHA oferuje prostą usługę zaciemniania wiadomości e-mail . Nie musisz zakładać konta i możesz od razu zacząć z niego korzystać. Możesz użyć usługi jako linku lub wyskakującego okienka.

Po rozwiązaniu captcha Twój adres e-mail jest wyświetlany jako href / mailto, dzięki czemu mogą go klikać / obserwować użytkownicy, którzy skonfigurowali swoich klientów poczty e-mail do pracy z przeglądarkami.

Rich Apodaca
źródło
to jest świetne i będzie działać 99,9% czasu. Dzięki za link do. Nie powiedzie się, gdy bot automatyzuje przeglądarkę.
IEnumerator
9
Nie sądzę, by większość użytkowników Internetu podjęła próbę rozwiązania captcha tylko po to, aby wysłać do kogoś wiadomość e-mail.
AndyM,
7
Jestem z Andym w tej sprawie. CAPTCHA to ból, a reCAPTCHA to jeszcze większy ból niż przeciętna, ponieważ często są zbyt trudne do odczytania. Jeśli osoby wysyłające e-maile do Ciebie są punktem konwersji (na przykład umożliwiając klientom zapytanie o usługi, zamówienie lub zapytanie ofertowe), naprawdę chcesz, aby było to dla nich jak najłatwiejsze.
Sylverdrag
8
Usługa już nie istnieje.
sorin
Usługa Google Mailhide została wycofana od 31 marca 2018 r.
sean
18

Lekkim sposobem zaciemnienia hrefkotwicy jest zakodowanie jej w base64:

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

A następnie dołącz go na stałe:

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

Lub dynamicznie po stronie serwera, np. W PHP:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

W połączeniu z odwróceniem ciągów znaków może to być dość bezpieczne dla spamu:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("[email protected]") ?></a>
Fabio Poloni
źródło
14

Najwyraźniej używanie CSS do zmiany kierunku tekstu działa całkiem nieźle. To łącze zawiera również test wielu innych metod zaciemniania.

Cokolwiek użyjesz, nieuchronnie zostanie pokonane. Twoim głównym celem powinno być uniknięcie irytujących użytkowników.

Brian Carper
źródło
4
Może to zapycha kopiowanie i wklejanie? IIRC
alex
7
Kiedy adres zostanie skopiowany i wklejony, pojawi się odwrotnie. Może to zniechęcać użytkowników, jeśli chcesz, aby kontakt z Tobą był jak najłatwiejszy.
Christian Davén
10

Nie używaj tutaj żadnych technik zaciemniania, ponieważ prawdopodobnie jest to pierwsze miejsce, w którym osoby zbierające pocztę e-mail będą szukać informacji, w jaki sposób ludzie zaciemniają wiadomości e-mail. Jeśli chcesz, aby Twój adres e-mail był widoczny w witrynie, nie kopiuj dosłownie metody innej osoby; zaciemniaj ją w unikalny sposób, którego nie używała żadna inna witryna, aby Twoja metoda nie była znana zbieraczom, zanim odwiedzą Twoją witrynę.

Sam Hasler
źródło
8
Jak bardzo rekurencyjne.
Paul Tomblin,
Unniloct: odpowiedź Sama Haslera ma zastosowanie niezależnie od tego, jaka jest najlepsza odpowiedź. Stosując najpopularniejszą technikę zaciemniania, uzyskujesz najbardziej prawdopodobny cel zbioru.
powiek
Chyba że najlepszą odpowiedzią jest faktycznie nie używać zaciemniania :)
JoshJordan
@JoshJordan: zgodził się, właściwie głosowałem za twoją odpowiedzią. Chodziło mi o to, że każda popularna technika zaciemniania zostanie w końcu zauważona przez spamerów i napiszą kod, aby ją odszyfrować.
Sam Hasler
2
Obecnie ta strona jest 28. wynikiem zwróconym przez Google dla [zaciemniony adres e-mail], chociaż spodziewam się, że w końcu wzrośnie wyżej.
Sam Hasler
8

Możesz zrobić to samo, co Google w Google Code (i grupach). Wyświetl część wiadomości e-mail i część, którą można kliknąć („...”). Kliknięcie oznacza, że ​​chcesz poznać wiadomość e-mail i zostaniesz poproszony o wypełnienie captcha. Następnie e-mail (i inne?) Będzie dla Ciebie widoczny.

Ross
źródło
8

moje jest właściwie proste:

<h3 id="email">hello@gmail.com</h3><!-- add a fake email -->


    $(document).ready(function(){
//my email in reverse :)
            var s = 'moc.elibomajninbew@htiek';
            var e = s.split("").reverse().join("");
            $('#email').html('<a href="mailto:'+e+'">'+e+'</a>');
    });
keithics
źródło
9
biedny facet, który jest właścicielem [email protected] :)
duedl0r
2
W Gmailu nie ma wiadomości e-mail zawierających 5 znaków.
Paulo Ney,
6

Używam zaciemniania JavaScript, spójrz na ten przykład:

http://www.jottings.com/obfuscator/

Codebrain
źródło
2
-1: Czy spojrzałeś na kod, który generuje? W rzeczywistości nie zaciemnia adresu e-mail, jeśli umieścisz go w „tekście linku”, i zaprzecza jego przeznaczeniu przez „mailto:”. Co gorsza, jest to rozwiązanie wymagające JavaScript, na którym nie można polegać w przypadku podstawowych treści.
powiek
6

Jedna z witryn, które utrzymuję, wykorzystuje nieco uproszczone metody JavaScript (miejmy nadzieję) do ochrony przed spamowaniem.

Linki e-mailowe wywołują funkcję JS:

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

Aby mieć pewność, że tylko użytkownicy, którzy mają włączony JS, zobaczą link, napisz je w ten sposób:

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

Użycie jednej funkcji JS do napisania łącza wywołującego inną oznacza, że ​​istnieją dwa poziomy ochrony.

Stewart
źródło
4

Jak wspomniano powyżej, używam również zaciemniania JavaScript ze strony internetowej jottings .

Strona generuje JavaScript, który można ulepszyć. mailto:Łańcuch tekstowy jest w klarowny i rozpoznawalny przez roboty (co może dostrzec to i unobfuscate ten ciąg), ale jeśli ktoś wejdzie do jottings.com strony internetowej adres e-mail formy mailto:[email protected]zamiast [email protected]a następnie usuwa tekstmailto:z wygenerowanego kodu JavaScript nagle pojawia się JavaScript, który nie wygląda tak, jakby w ogóle miał coś wspólnego z pocztą elektroniczną - po prostu losowy JavaScript, którego sieć jest pełna. Można to jeszcze bardziej poprawić, pozbywając się tekstu linku - zastąpiłem mój obrazem mojego adresu e-mail, który jest dość niejasny. Następnie na wypadek, gdyby ta metoda na jottings.com stała się popularna, losowałem nazwy zmiennych w wyjściowym JavaScript, aby robotowi trudno było wykryć wystąpienie kodu JavaScript wygenerowanego przez jottings.

Oczywiście niektóre z tych ulepszeń można by wbudować w sam mechanizm zapisywania, a ponieważ kod jest ogólnie dostępny, byłoby to stosunkowo łatwe.

Przykład może to trochę wyjaśnić. Użyłem Jottings Obfuscator pod powyższym linkiem, aby zasłonić mailto:[email protected](zauważ, że oszukuję oryginalną intencję witryny z notowaniami, wprowadzając ciąg mailto:[email protected]zamiast [email protected]) z tekstem „Wyślij mi e-mail”, który z notatek przekształcił w ten 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>

Po odzyskaniu tego wklejam go do edytora i:

  1. usunąć mailto:
  2. zamień tekst łącza na wskaźnik do obrazu mojego adresu e-mail
  3. zmienić nazwy wszystkich zmiennych
  4. zastąp sekcję „noscript” innym linkiem do obrazu adresu e-mail

Skończyło się na tym:

<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>
Al Whaley
źródło
3

Nie wiem, jak dobrze to by działało. Czy nie mógłbyś zostawić swojego adresu e-mail i załadować go za pomocą połączenia AJAX po zakończeniu ładowania strony. Nie jestem pewien, czy roboty spamujące mogą odebrać zmieniony kod HTML lub czy są wystarczająco sprytne, aby nasłuchiwać innego ruchu HTTP, aby spróbować wybrać adresy e-mail, lub czy po prostu skanują stronę, gdy jest odbierana po raz pierwszy.

uriDium
źródło
Czas spędzony na wdrażaniu implementacji ładowania poczty e-mail AJAX: 3 dni. Czas zaoszczędzony w spamie, którego nie musisz usuwać: 17 minut.
2

Pewien facet przetestował dziewięć różnych sposobów prezentacji adresu e-mail na stronie, a następnie opublikował wyniki na swoim blogu.

Jego trzy najlepsze sposoby to:

  1. Zmiana kierunku kodu za pomocą CSS
  2. Korzystanie z wyświetlania CSS: brak
  3. Szyfrowanie ROT13

Uwaga - to zostało opublikowane dwa lata temu. Boty spamujące mogły stać się mądrzejsze.

Doug Harris
źródło
1

Jeśli pracujesz z PHP, możesz pobrać darmowy skrypt, który robi to automatycznie. Nazywa się „Private Daddy” i używamy go w naszej własnej usłudze strumieniowego przesyłania dźwięku online. Tylko jedna linia kodu i działa po wyjęciu z pudełka ... możesz go pobrać tutaj

Reuven
źródło
Chciałbym wiedzieć, dlaczego ktoś to zlekceważył. Przydałoby się wyjaśnienie.
Yannis Dran
1

Innym podejściem mogłoby być użycie struktury JavaScript i powiązanie danych / modelu z elementami HTML. W przypadku AngularJS elementy HTML byłyby zapisane jako:

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

Powiązanie interpolacji {{data}} używa zmiennej zakresu, która zawiera rzeczywistą wartość e-mail. Ponadto można również zastosować filtr, który obsługuje dekodowanie wiadomości e-mail w następujący sposób:

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

Korzyści wynikają ze sposobu pisania kodu HTML. Wadą jest to, że wymaga obsługi skryptów, które dla niektórych mogą być nie.

po prostu inne podejście.

ozkary
źródło
1

Używa JQuery, ale w razie potrzeby można go łatwo przenieść do zwykłego JS. Zajmie następujący blok HTML. Ten przykład, który podałem, dotyczy również tel:linków do połączeń telefonicznych.

<a class="obfuscate" 
 href="mailto:archie...trajano...net">
 archie...trajano...net
</a>
<a class="obfuscate"
 href="tel:+One FourOneSix-EightFiveSix-SixSixFiveFive">
 FourOneSix-EightFiveSix-SixSixFiveFive
</a>

i przekonwertuj go na odpowiednie linki za pomocą JavaScript.

$ (". obfuscate"). each (function () {

$ (this) .html ($ (this) .html ()
.replace ("...", "@"). replace (/\.\.\./ g, ".")
.replace (/ One / g, "1")
.replace (/ Two / g, "2")
.replace (/ Three / g, "3")
.replace (/ Four / g, "4")
.replace (/ Five / g, "5")
.replace (/ Six / g, "6")
.replace (/ Seven / g, "7")
.replace (/ Eight / g, "8")
.replace (/ Nine / g, "9")
.replace (/ Zero / g, "0"))

$ (this) .attr ("href", $ (this) .attr ("href")
.replace ("...", "@"). replace (/\.\.\./ g, ".")
.replace (/ One / g, "1")
.replace (/ Two / g, "2")
.replace (/ Three / g, "3")
.replace (/ Four / g, "4")
.replace (/ Five / g, "5")
.replace (/ Six / g, "6")
.replace (/ Seven / g, "7")
.replace (/ Eight / g, "8")
.replace (/ Nine / g, "9")
.replace (/ Zero / g, "0"))

})

Udokumentowałem to bardziej szczegółowo tutaj https://trajano.net/2017/01/obfuscating-mailto-links/

Algorytm de / zaciemniania jest dość prosty, więc jego zapisywanie nie jest zbyt trudne (nie ma potrzeby analizowania base64)

Archimedes Trajano
źródło
1

Rozwiązanie połączeń Ajax

Najlepiej mieć formularz na stronie i nie pokazywać adresu e-mail, ponieważ wszystkie roboty są bardziej inteligentne z dnia na dzień, ale jeśli chcesz wyświetlać adres e-mail na stronie, możesz to zrobić za pomocą połączenia Ajax na swoim serwer i pokaż go po kliknięciu.

HTML

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

lub

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

Dla większego bezpieczeństwa możesz zmienić .onw .oneten sposób $(document).one('click', '.obfmail', function(e) {lub nawet pracować z tokenem wygenerowanym w PHP, który przekazujesz do danych przy wywołaniu ajax, aby zaakceptować tylko jedno wywołanie funkcji ajax, jak to:

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

jQuery:

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

.

Możliwe jest również zakodowanie zwróconego adresu e-mail lub jego odwrócenie.

.

Działa dobrze również dla numerów telefonów!

Meloman
źródło
0

Szczerze mówiąc, Twój problem może być dyskusyjny, jeśli zadasz pytanie, czy naprawdę chcesz użyć poczty mailto. Wiele osób, które na przykład używają poczty internetowej lub nie mają odpowiedniej konfiguracji klienta poczty w swojej przeglądarce, nie odniesie korzyści z mailto. Ujawniasz swój adres e-mail dla funkcji, która nie będzie działać dla dużej części użytkowników.

Zamiast tego możesz użyć formularza do wysłania wiadomości e-mail za kulisami, aby adres e-mail był ukryty i nie musisz się martwić o biednych oszustów, którzy nie skorzystają z poczty.

Brad Barker
źródło
0

Jeśli powiesz w swojej witrynie, że „Mój adres e-mail to (moje imię) @ (moje nazwisko) .com.”, A Twoje imię i nazwisko są cholernie oczywiste, wydaje się, że jest to najlepsza ochrona przed spamem dostaniesz.

Dean J.
źródło
czy nawiasy nie są faktycznie dozwolone w pełnoprawnych e-mailach? wygląda na to, że może to być prawidłowy adres e-mail. : p
Kzqai
1
To kolejny powód, dla którego boty spamujące przegapią Twoją skrzynkę odbiorczą. :-)
Dean J
0

Jeśli ktoś używa Railsów, może użyć actionview-encoded_mail_toklejnotu. ( https://github.com/reed/actionview-encoded_mail_to )

Jest kilka opcji:

: encode - Ten klucz akceptuje ciągi „javascript” lub „hex”. Przekazanie „javascript” spowoduje dynamiczne utworzenie i zakodowanie łącza mailto, a następnie przeniesienie go do modelu DOM strony. Ta metoda nie pokaże linku na stronie, jeśli użytkownik ma wyłączoną obsługę JavaScript. Przekazanie „hex” spowoduje kodowanie szesnastkowe adresu email_address przed wyprowadzeniem linku mailto.

: replace_at - Jeśli nazwa linku nie jest podana, adres email jest używany jako etykieta linku. Możesz użyć tej opcji do zaciemnienia adresu email_address, zastępując znak @ ciągiem podanym jako wartość.

: replace_dot - Jeśli nazwa linku nie jest podana, adres email jest używany jako etykieta linku. Możesz użyć tej opcji, aby zaciemnić adres email_address, zastępując rozszerzenie. w wiadomości e-mail z ciągiem znaków podanym jako wartość.

chug2k
źródło
0
<!-- 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>
PHC
źródło
0

Ponieważ to rozwiązanie nie jest nigdzie wymieniane, ale działa dobrze:

Robię to:

  • utwórz łącze mailto z fałszywymi wiadomościami e-mail. Lubię [email protected] z oczywistych powodów: Spamer może spamować swój własny botnet, gdy używa tego adresu niezaznaczonego.

  • zaszyfruj prawdziwy adres e-mail i umieść go w niepowiązanym, ale możliwym do znalezienia ukrytym zakresie lub w jakimkolwiek elemencie, który lubisz. Oczywiście, aby zaciemnić wiadomość e-mail i ukryć ją przed kombajnem. W zależności od struktury projektu możesz nawet chcieć umieścić go w zmiennej JS lub Session.

  • po sekundzie utwórz moduł obsługi kliknięć dla tych linków, który rozszyfruje i zapisze poprawny adres e-mail w fałszywym łączu mailto, nie blokując wartości domyślnych. Nie sądzę, żeby roboty indeksujące klikały linki mailto, ale gdyby tak zrobiły, prawdopodobnie nie czekałyby ani sekundy, podczas gdy istota ludzka musiałaby bardzo szybko kliknąć łącze w pierwszej sekundzie po załadowaniu strony.

Teraz masz w pełni funkcjonalny, ale zaciemniony, honeypoted i zabezpieczony czasowo łącze mailto.

Działający przykładowy plik php:

<html>
<head>
<title>E-Mail Obfuscating</title>
</head>
<body>
<?php
$email = "[email protected]";
echo "<a class='emailLink' href='mailto:[email protected]' >Send me an e-mail!</a>"
    ."<span style='display:none' data-hash='" . base64_encode($email) . "' />";
?>
<script>
<!--
var emailLinks = document.getElementsByClassName("emailLink");
setTimeout(function() {
    for(var i=0; i <emailLinks.length; ++i){
        emailLinks[i].addEventListener("click", function(){
            let encodedEmail = this.nextSibling.getAttribute('data-hash');
            let decodedEmail = atob(encodedEmail);
            this.href = "mailto:" + decodedEmail;
            this.text = decodedEmail;
        });
    }
}, 1000);

-->
</script>
</body>
</html>

Niech kod będzie z tobą.

mondjunge
źródło
0

Co się stanie, jeśli utworzysz łącze „Skontaktuj się ze mną” wskazujące katalog chroniony hasłem? Oczywiście musisz dać przepustkę, aby uzyskać dostęp.

„Skontaktuj się ze mną”> •••••••••••> contact / index.html

Po uzyskaniu dostępu strona contact / index.html ujawnia wiadomość e-mail, na przykład mailto.

Pascal Myrta
źródło
-1

Używam funkcji PHP do generowania javascript do wysyłania wiadomości e-mail podczas ładowania strony. Pamiętaj, że nie potrzebujesz PHP do generowania JS w czasie wykonywania, możesz wygenerować JS raz lokalnie, a następnie dołączyć statyczny JS do swojej strony.

Możesz również użyć połączonej funkcji z tym fragmentem poniżej, aby automatycznie zaciemnić adresy e-mail w danym HTML (gdzie $ ProcessContent to HTML):

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }
kocham Włochy
źródło
gdzie zdefiniowałeś createJSMailLink ()?
Stelian
-2

Spójrz na to .

„Formularz Enkodera” zaszyfruje Twój adres e-mail i przekonwertuje wynik do samooceniającego się kodu JavaScript, ukrywając go przed robotami zbierającymi wiadomości e-mail, które przeszukują sieć w poszukiwaniu ujawnionych adresów. Twój adres będzie wyświetlany poprawnie przez przeglądarki internetowe, ale będzie praktycznie nieczytelny dla robotów zbierających wiadomości e-mail.

Zaki
źródło