Skuteczna metoda ukrywania wiadomości e-mail przed botami spamowymi

196

Na mojej stronie domowej używam tej metody, aby ukryć swój e-mail przed robotami spamującymi:

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

Co o tym myślisz? Czy to jest skuteczne? Jakie inne metody znasz lub używasz?

abatishchev
źródło
Albo jest to duplikat stackoverflow.com/questions/163628/... , albo ten drugi jest nieprawidłowy, ponieważ jest to długa lista wiki społeczności.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
Ten ma więcej pozytywnych opinii, odpowiedzi i poglądów. Nie należy go zamykać na korzyść innego, który ma mniej głosów pozytywnych, odpowiedzi i poglądów.
abatishchev
1
Zamknęłbym tę, żeby śledzić fakt, że ta przyciąga znacznie więcej.
abatishchev
6
Najlepszym rozwiązaniem jest nie udostępnianie swojego rozwiązania . Niestety, takie jest pytanie. Najlepiej jest znaleźć rozwiązanie i zachować je dla siebie. Jeśli ktoś zostanie znormalizowany, spamboty zostaną przystosowane do jego przezwyciężenia.
Dimitris
1
Najlepszym rozwiązaniem jest połączenie kilku poniższych rozwiązań , np. Pierwsza część wiadomości e-mail jako obraz, druga część this.href.replace(/x/g,''), kodowanie szesnastkowe w trzeciej części itp. Brak bota spamowego, bez względu na to, jak sprytny, spróbuje różnych metod dekodowania w różnych częściach adres e-mail.

Odpowiedzi:

98

Jest to metoda, której użyłem, z uwzględnieniem po stronie serwera, np. <!--#include file="emailObfuscator.include" -->Gdzie emailObfuscator.includezawiera następujące elementy:

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

Aby dołączyć adres, używam 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>

Ponieważ otrzymuję pocztę e-mail za pośrednictwem Gmaila od 2005 r., Spam praktycznie nie stanowi problemu. Nie mogę więc mówić o skuteczności tej metody. Możesz przeczytać to badanie (choć jest stare), które wytworzyło ten wykres:

wprowadź opis zdjęcia tutaj

Fuhrmanator
źródło
Dlaczego potrzebujesz dołączania po stronie serwera emailObfuscator.include? Czy nie byłoby tak samo jak pisanie go jako zwykłego pliku .html? (może to tylko przykład?) Również dlaczego używasz komentarzy HTML <!-- -->w skrypcie? I wreszcie, dlaczego jeden z <script>tagów ma małe litery, a inne duże <SCRIPT>? Czy te metody pomagają pomylić boty lub coś takiego?
Templariusz
@Templar SSI nie jest konieczne, ani nie myli botów, o ile mi wiadomo. To sprawia, że ​​moja witryna jest modułowa (nie używam już tej metody). W komentarzu podano źródło, w którym znalazłem włamanie (teraz uszkodzony link). Zmiana przypadku to tylko przypadek. Jeśli wprawia to w zamieszanie boty, tym lepiej, ale wątpię, aby miało to jakikolwiek skutek.
Fuhrmanator,
4
Nowsze i kompletne badanie dotyczące tego samego pomysłu: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon
96

Praca z zawartością i attr w 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>

Gdy javascript jest wyłączony, po prostu kliknięcie nie będzie działać, wiadomość e-mail jest nadal wyświetlana.

Innym interesującym podejściem (przynajmniej bez zdarzenia kliknięcia) byłoby użycie znaku od prawej do lewej w celu przesłonięcia kierunku pisania. więcej na ten temat: https://en.wikipedia.org/wiki/Right-to-left_mark

cyptus
źródło
6
To wymaga więcej aprobat.
heXer
Nie jestem pewien, dlaczego, ale chociaż to rozwiązanie wygląda dość imponująco, nie uruchamia mojego klienta poczty e-mail. Oto skrzypce do przetestowania z: jsfiddle.net/wd436tg3
Ricardo Zea
1
@RicardoZea, której przeglądarki używasz? twoje skrzypce działa dla mnie dobrze w chrome, tj. 11, edge i firefox
cyptus
3
Niesamowite. Ale dołącz „; return false” do zdarzenia onclick. Zapobiegnie to brzydkiemu dodawaniu # do adresu URL przeglądarki (poprzez anulowanie oryginalnego linku href-link)
T4NK3R
5
JEDNAK - Nie mogę ręcznie skopiować (widocznego) adresu e-mail (w Chrome, Firefox lub Edge)?
T4NK3R 19.04.17
83

Spójrz na to w ten sposób , całkiem sprytnie i używając css.

CSS

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

HTML

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

Powyższy CSS zastąpi wówczas kierunek czytania i wyświetli tekst użytkownikowi we właściwej kolejności.

Mam nadzieję, że to pomoże

Twoje zdrowie

zaokrąglenie
źródło
54
To na pewno zabawne. Niestety nie jest to możliwe do kliknięcia i nie działa w przypadku kopiowania / wklejania, przy jednoczesnym zaniedbaniu przeglądarki innej niż CSS, takiej jak czytniki brajlowskie.
Arjan
Mhm, ale kiedy ludzie, którzy piszą roboty, zobaczą, staje się bezużyteczny.
Mau
6
Dopasowywanie zwrotnego adresu e-mail do RegEx jest tak samo łatwe, jak dopasowanie nieodwróconego. Spamowanie to biznes wart miliard dolarów, a spamer nawet nie używa własnych cykli procesora do zeskrobywania ekranów. W rzeczywistości przeczytali już tę rozmowę i odpowiednio dostosowali swoje metody. Boty mogą odczytać wszystko, co można odczytać z komputera. Niezależnie od tego, czy jest wykonywany przez CSS czy JavaScript.
Jani Hyytiäinen
3
@ JaniHyytiäinen Nie zgadzam się. Fakt, że nie płacą za procesor, nie oznacza, że ​​mają nieograniczone zasoby. Jeśli uruchomienie interpretera JS przyniesie zbyt mało adresów dla jego kosztu, wyłączą go.
o0 ”.
1
@Lohoris: Google zgłasza średni czas ładowania strony (2,45 s) i średni rozmiar strony (320 KB), daje wyobrażenie o tym, ile parsowania możesz zrobić. Podczas pobierania żądań wątek analizujący może wykonać przetwarzanie. Większość pobierania czeka. Co daje wątkowi dl możliwość sprawdzenia wymagań wstępnych przed podjęciem decyzji o wysłaniu go do analizatora składni. Np. Renderowanie strony, indexOf ('@'), indexOf ('mailto:') itp. Wątek parsujący otrzyma tylko + -200 znaków wokół dopasowania, co pozwoliłoby na tak złożone parsowanie, że mogłoby się wydawać "nieskończone" warunki analizy składniowej.
Jani Hyytiäinen
52

Mam zupełnie inne podejście do tego. Używam Mailhide do tego.

MailHide to system firmy Google, w którym użytkownik musi przejść test reCAPTCHA, aby następnie przekazać mu wiadomość e-mail.

tvanfosson
źródło
15
Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
showdev
5
Chociaż ogólnie zgadzam się z tym sentymentem, w tym przypadku odpowiedzią jest użycie konkretnego narzędzia. Jeśli link zniknie, usunę odpowiedź.
tvanfosson
Dzięki - to świetnie. Piszę coś takiego (odsyłam to link): Wyślij mi e-mail:
wyjaw
6
Pamiętaj, że Google wyłączył MailHide od Match 2018. Jak zawsze z „darmowymi” usługami Google: oferują je tak długo, jak mogą czerpać zyski z danych, a kiedy już dostaną to, czego potrzebują, upuszczają je. Najbardziej nierzetelna firma oferująca bezpłatne usługi. Trzymałbym się z daleka od usług Google czy kogokolwiek innego, jeśli chcesz polegać na tym, co próbujesz zrobić.
masi
51

Pierwotnie nie mój pomysł, ale nie mogę znaleźć autora:

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

Dodaj tyle x, ile chcesz. Działa idealnie do odczytu, kopiowania i wklejania i nie może być odczytany przez bota.

Andrew Swift
źródło
2
Schludny! Ale co z użytkownikami urządzeń mobilnych?
Bodzio
Najechanie myszą jest również uruchamiane po dotknięciu linku. Powinno działać dobrze.
Andrew Swift,
4
Działa, dopóki twój adres nie zawiera żadnych x. :-p Ale wiem, użyj innej litery.
Dan Henderson
1
Ale jeśli javascript jest wyłączony, wyświetlasz użytkownikom nieistniejący adres, który zostanie odesłany, tracąc klienta / użytkownika.
Xeevis,
34
Jeśli javascript jest wyłączony, żadna z moich stron w ogóle nie działa ;-)
Andrew Swift
16

Myślę, że jedyną niezawodną metodą, jaką możesz mieć, jest utworzenie strony Skontaktuj się ze mną, która jest formularzem przesyłanym do skryptu, który wysyła na Twój adres e-mail. W ten sposób Twój adres nigdy nie będzie publicznie dostępny. Z jakiegoś powodu może to być niepożądane, ale myślę, że to całkiem dobre rozwiązanie. Często denerwuje mnie, gdy jestem zmuszony skopiować / wkleić czyjś adres e-mail z jego witryny do mojego klienta poczty i wysłać mu wiadomość; Wolę to zrobić bezpośrednio za pośrednictwem formularza na ich stronie. Takie podejście pozwala również na wysyłanie anonimowych komentarzy itp. Pamiętaj, aby zabezpieczyć formularz za pomocą jakiegoś programu przeciw botom, takiego jak captcha. Jest ich wiele omawianych tutaj na SO.

rmeador
źródło
6
Jedynym problemem jest to, że nie masz kopii wysłanej wiadomości, chyba że poświęcisz trochę czasu na skopiowanie i wklejenie jej w innym miejscu. Osobiście nie mam nic przeciwko kopiowaniu i wklejaniu, ale każdemu z nich.
gvkv
6
Co do nadawcy, który nie ma kopii: w przypadku wielu rodzajów formularzy w sieci uwielbiam opcję samodzielnego otrzymania kopii. Jednak często taka opcja pozwala na nadużycie w celu anonimowego wysyłania wiadomości do prawie każdego ...
Arjan
12
Może to ukryć Twój adres e-mail, ale w ogóle nie zatrzyma spamu, chyba że zabezpieczysz formularz za pomocą skryptu do sprawdzania poprawności obrazu captcha.
SimonDowdles,
1
Możesz również rozwiązać problem z brakiem kopii przez nadawcę, włączając opcję wysłania jej również do nich.
steinybot
1
Opcja „Wyślij kopię do siebie” - skutecznie zamienia formularz w kanon spamowy, a Ty jako nadawca - zły pomysł!
T4NK3R
10

Jeśli masz wsparcie php, możesz zrobić coś takiego:

<img src="scriptname.php">

I skryptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "[email protected]";
$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);
?>
Matias
źródło
1
zamiast używać php, możesz fizycznie stworzyć obraz. I podobnie jak w przypadku odwrócenia css nadal masz problem z brakiem możliwości kliknięcia i nie można go skopiować, chyba że użyjesz długopisu: P
Claudiu
9

Wiem, że moja odpowiedź nie spodoba się wielu, ale proszę przejrzeć punkty przedstawione tutaj przed kciukiem w dół.

Wszystko, co można łatwo odczytać maszynowo, będzie łatwe do odczytania przez spamerów. Choć ich działania wydają nam się głupie, nie są to głupi ludzie. Są innowacyjni i zaradni. Nie tylko używają botów do zbierania wiadomości e-mail, mają do dyspozycji mnóstwo metod, a ponadto po prostu płacą za dobre, świeże listy wiadomości e-mail. Oznacza to, że mają tysiące hakerów na całym świecie, którzy wykonują swoje zadania. Ludzie gotowi do kodowania złośliwego oprogramowania, które zeskrobują ekrany przeglądarek innych ludzi, co ostatecznie czyni każdą metodę, którą próbujesz osiągnąć, bezużyteczną. Ten wątek został już przeczytany przez ponad 10 takich osób i śmieją się z nas. Niektóre z nich mogą być nawet znudzone łzami, aby dowiedzieć się, że nie możemy postawić im nowego wyzwania.

Pamiętaj, że ostatecznie nie próbujesz oszczędzać czasu, ale czasu innych. Z tego powodu rozważ rozważenie spędzenia tutaj dodatkowego czasu. Nie ma łatwej do wykonania magicznej kuli, która by działała. Jeśli pracujesz w firmie, która publikuje na stronie 100 e-maili i możesz zmniejszyć 1 spam dziennie na osobę, mówimy o 36500 e-mailach spamowych rocznie. Jeśli usunięcie takiej wiadomości e-mail zajmuje średnio 5 sekund, mówimy o 50 godzinach pracy rocznie. Nie wspominając o zmniejszonej irytacji. Dlaczego więc nie poświęcić na to kilku godzin?

Nie tylko ty i ludzie, którzy otrzymują e-mail, uważają czas za atut. Dlatego musisz znaleźć sposób na zaciemnienie adresów e-mail w taki sposób, aby się nie opłaciło. Jeśli używasz jakiejś powszechnie stosowanej metody do zaciemniania wiadomości e-mail, naprawdę warto je złamać. Ponieważ w rezultacie cracker dostanie tysiące, jeśli nie dziesiątki lub setki tysięcy świeżych wiadomości e-mail. I dla nich dostaną pieniądze.

Więc naprzód i napisz własną metodę. Jest to rzadki przypadek, w którym wynalezienie koła naprawdę się opłaca. Użyj metody, której nie można odczytać maszynowo i która będzie wymagała pewnej interakcji użytkownika bez poświęcania wygody użytkownika.

Spędziłem około 20 minut, żeby zakodować przykład tego, co mam na myśli. W tym przykładzie użyłem KnockoutJS tylko dlatego, że mi się podoba i wiem, że prawdopodobnie sam go nie użyjesz. Ale to i tak nie ma znaczenia. To niestandardowe rozwiązanie, które nie jest powszechnie stosowane. Złamanie go nie będzie nagrodą za zrobienie tego, ponieważ metoda zrobienia tego działałaby tylko na jednej stronie w rozległym Internecie.

Oto skrzypce: http://jsfiddle.net/hzaw6/

Poniższy kod nie jest przykładem dobrego kodu. Ale tylko krótka próbka kodu, który jest bardzo trudny do zrozumienia przez maszynę, obsługuje nawet e-maile. I nawet jeśli da się to zrobić, to nie opłaca się wykonywać na dużą skalę.

I tak, wiem, że to nie działa na IE = lte8 z powodu „Nie można uzyskać atrybutów właściwości” niezdefiniowanego lub zerowego odwołania ”, ale po prostu mnie to nie obchodzi, ponieważ jest to tylko demonstracja metody, a nie faktyczna implementacja, i nie jest przeznaczony do wykorzystania w produkcji w obecnej postaci. Możesz napisać własny kod, który jest fajniejszy, technicznie bardziej solidny itp.

Aha, i nigdy nie wymieniaj żadnych wiadomości e-mail ani html ani javascript. Zbyt łatwo jest zeskrobać DOM i obiekt okna dla dowolnej nazwy o nazwie poczta lub e-mail i sprawdzić, czy zawiera coś, co pasuje do wiadomości e-mail. Dlatego nie chcesz, aby zmienne, które zawierałyby e-mail w pełnej formie, nie były nigdy potrzebne, dlatego też chcesz, aby użytkownik wchodził w interakcję ze stroną przed przypisaniem takich zmiennych. Jeśli Twój obiektowy model javascript zawiera adresy e-mail w stanie gotowości DOM, udostępniasz je spamerom.

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>

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);
Jani Hyytiäinen
źródło
8

Jedną z moich ulubionych metod jest zaciemnianie adresu e-mail za pomocą php, klasycznym przykładem jest konwersja znaków na wartości HEX, takie jak:

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

A potem w moim znaczniku po prostu nazywam to w następujący sposób:

  <a href="mailto:<?php echo myobfiscate('[email protected]'); ?>"
title="Email me!"><?php echo myobfiscate('[email protected]');?> </a>

Następnie sprawdź swoje źródło, będziesz mile zaskoczony!

SimonDowdles
źródło
To dobry przykład. Dzięki. Masz jakieś wskazówki co do SpamBotów korzystających z dekodowania HEX?
jasonflaherty
7

Możesz spróbować ukryć znaki za pomocą elementów HTML w heksie (np .: & # x40 dla @). Jest to wygodne rozwiązanie, ponieważ poprawna przeglądarka go przetłumaczy i możesz mieć zwykły link. Wadą jest to, że bot może to teoretycznie przetłumaczyć, ale jest to trochę niezwykłe. Używam tego, aby chronić swój e-mail na moim blogu.

Innym rozwiązaniem jest użycie javascript do złożenia części adresu i odkodowania go w locie. Wadą jest to, że przeglądarka z wyłączoną obsługą javascript nie wyświetla twojego adresu.

Najskuteczniejszym rozwiązaniem jest użycie obrazu , ale użytkownik musi ręcznie skopiować adres ręcznie.

Twoje rozwiązanie jest całkiem dobre , ponieważ dodajesz tylko wadę (ręczne pisanie @) tylko dla użytkowników, którzy mają wyłączony JavaScript. Możesz być również bardziej bezpieczny dzięki:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"
ofaurax
źródło
5

Spamboty nie będą tego interpretować, ponieważ jest to metoda mniej znana :)

Najpierw zdefiniuj css:

email:before {
    content: "admin";
}

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

Teraz, gdziekolwiek chcesz wyświetlić swój adres e-mail, po prostu wstaw następujący kod HTML:

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

I tada!

Aaron Ezaw
źródło
Działa, ale nie obsługuje wklejania kopii, co może mieć wpływ na użyteczność dla większości użytkowników
Iruku Kagika
4

Używam bardzo prostej kombinacji CSS i jQuery, która wyświetla użytkownikowi adres e-mail poprawnie, a także działa po kliknięciu lub najechaniu kotwicą:

HTML:

<a href="mailto:[email protected]" 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);
});

Oto działający przykład.

Sergiu
źródło
czy wyświetli prawidłową wartość href na pasku stanu przeglądarki po najechaniu kursorem na link?
Nik O'Lai,
Tak, pokazuje poprawną wartość href po najechaniu linkiem. Dlatego należy wdrożyć metodę jQuery .hover.
Sergiu
Niestety nie, nie pokazuje poprawnej wartości href, przynajmniej po pierwszym najechaniu kursorem na link (to [email protected]). Przy drugim najechaniu wszystko było w porządku. Przetestuj to z własnym linkiem.
Nik O'Lai
1
Działa w Chrome i IE. Wygląda na to, że tylko w Firefoksie, po pierwszym najechaniu kursorem pasek stanu nie jest aktualizowany. Spróbuję znaleźć rozwiązanie dla Firefoksa.
Sergiu
1
Rozumiem, naprawdę to lubię.
Eric Bishard,
3

! - Dodając to w celach informacyjnych, nie wiem, jak nieaktualne mogą być informacje, ale mówi o kilku prostych rozwiązaniach, które nie wymagają użycia żadnego skryptu

Po tym, jak sam tego szukałem, natknąłem się na tę stronę, ale także na te strony:

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

spróbuj odwrócić adres e-mail

Przykład zwykłego HTML:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : [email protected]

Ten sam efekt przy użyciu CSS

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

Połączenie tego z dowolną z wcześniej wymienionych metod może nawet zwiększyć jego skuteczność

Johann de Vries
źródło
3

Jednym łatwym rozwiązaniem jest użycie encji HTML zamiast rzeczywistych znaków. Na przykład „[email protected]” zostanie przekonwertowane na:

<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>
Romain Linsolas
źródło
2
Spróbuj google.se/search?q=HTML+entities+converter, który powinien Cię zająć;)
grapefrukt
1
Google może znaleźć dla Ciebie wiele stron. Jeden przykład: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas
4
Ale czy bot nie może równie łatwo regexować tego?
gigantyczny
20
Otóż ​​przykład me @ stack ... lepiej napisać jako [email protected], [email protected] lub [email protected] - to jedyne nazwy domen, których nie właściciele powinni używać w przykładach!
Arjan
4
Nie tak skuteczne, zgodnie z techblog.tilllate.com/2008/07/20/…
Fuhrmanator
3

Oto moja działająca wersja:


Utwórz gdzieś kontener z tekstem zastępczym:

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

I dodaj na dole DOM (wrt renderowania) następujący fragment:

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

Dodaje wygenerowane hiperłącze do określonego kontenera:

<div id="knock_knock"><a rel="nofollow" href="[email protected]">Mail</a></div>

Ponadto tutaj jest wersja zminimalizowana:

<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>
Dariusz
źródło
2

Najlepsza metoda ukrywania adresów e-mail jest dobra, dopóki programista bot nie odkryje tego „kodowania” i nie wdroży algorytmu deszyfrowania.

Opcja JavaScript nie będzie długo działać, ponieważ jest wiele robotów interpretujących JavaScript.

Nie ma odpowiedzi, imho.

guerda
źródło
Czy przeszukiwacze interpretują JavaScript? W ciągu ostatnich kilku lat moja jedna metoda kodowania JavaScript działała dla mnie dobrze - mój wskaźnik spamu był dość stały ~ 4 / tydzień, więc nie martwiłem się o adresy innych osób, które powierzyłem tej metodzie. Czy powinienem?
Kev
Z pewnością może to wykluczać wiele przeszukiwaczy, ale ja, gdybym utworzył przeszukiwacz adresów, zaimplementowałbym bibliotekę JavaScript :)
guerda
więcej wysiłku, niż mogłoby się wydawać
anonimowy tchórz
Google indeksuje teraz niektóre JS.
Alister Bulman
2

Prawdopodobnie są boty, które rozpoznają [at]inne przebrania jako @symbol. Więc to nie jest naprawdę skuteczna metoda.

Pewnie możesz użyć niektórych kodowań, takich jak kodowanie URL lub odwołania do znaków HTML (lub oba):

// 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 = '[email protected]';
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>

Ponieważ jednak korzystanie z nich jest legalne, każdy klient przeglądarki / klienta poczty e-mail powinien również obsługiwać te kodowania.

Gumbo
źródło
Całkowicie się zgadzają, że spamerzy są „sprytnymi” ludźmi, po latach dodawania [at] lub [dot] zamiast składni, oczywiście będą mieli algorytmy, które wychwytują te wzorce.
SimonDowdles,
Co powiesz na dekodowanie tych wartości HEX?
jasonflaherty
2

Jestem fanem SpamSpan - jest zaciemniony, ale nadal można go odczytać, jeśli JS jest wyłączony. Wygląda na to, że również działa, chociaż używam go od około roku na stronie o niskim natężeniu ruchu.

Istnieje również moduł umożliwiający Drupalowi automatyczne przekształcanie wiadomości e-mail w SpamSpans, jeśli jest potrzebny.

Roman Starkov
źródło
1

Czy to działa, jeśli kliknę link prawym przyciskiem myszy i wybierz opcję „skopiuj adres URL”? Jeśli nie, to nie jest to idealna sytuacja (bardzo rzadko klikam link mailto, wolę skopiować adres e-mail i wkleić go do mojej aplikacji pocztowej lub gdziekolwiek będę go potrzebować w określonym momencie).

Kiedyś byłem dość paranoikiem, chroniąc swój adres e-mail online (UseNet, sieć itp.), Ale obecnie podejrzewam, że więcej „możliwych celów spamu” jest generowanych programowo, dopasowując części lokalne do domen. Opieram się na tym, że czasami przeglądam logi serwera pocztowego. Często zdarza się, że istnieje kilka prób dostarczenia na nieistniejące adresy (w tym skrócone wersje przynęty antyspamowej, którą zwiesiłem na UseNet pod koniec lat 90., kiedy bardzo często występowało wyskakiwanie adresów).

Vatine
źródło
1

po użyciu tak wielu technik znalazłem łatwy i bardzo przyjazny sposób, boty szukają @ Símbolo, a ostatnio szukają [at] ant i jego wariantu, więc używam 2 technik

  1. piszę mój e-mail na obrazie takim jak domainolls i działa idealnie lub
  2. aby zastąpić Símbolo (@) jego podobnym obrazem

@ zastąpić a obraz alt będzie alt = "@", więc bot znajdzie obraz, a każdy człowiek zobaczy go jako normalny adres, więc jeśli go skopiuje, skopiuje wiadomość e-mail, a zadanie to nie, więc kod będzie

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>
Abdalla Mohamed Aly Ibrahim
źródło
1

Istnieje otwarty skrypt PHP z licencją, który wyświetla javascript, który koduje pocztę: http://www.maurits.vdschee.nl/php_hide_email/ . Następnie możesz łatwo wywołać funkcję php z określoną pocztą jako argumentem.

Fanky
źródło
1

Najpierw upewnię się, że adres e-mail wyświetla się tylko wtedy, gdy masz włączony JavaScript. W ten sposób nie ma zwykłego tekstu, który można odczytać bez javascript.

Po drugie, sposobem na wdrożenie bezpiecznej funkcji jest unikanie <button>tagu. Ten tag wymaga wstawienia tekstu między tagami, co czyni go czytelnym dla komputera. Zamiast tego spróbuj <input type="button">z obsługą javascript dla onClick. Następnie zastosuj wszystkie techniki wymienione przez otherse, aby zaimplementować bezpieczną notację e-mail.

Inną opcją jest przycisk „Kliknij, aby zobaczyć adres e-mail”. Po kliknięciu zmienia się w zakodowany e-mail (znaki w kodach HTML). Po kolejnym kliknięciu przekierowuje to do funkcji „mailto: email”

Niekodowana wersja ostatniego pomysłu, z adresami e-mail do wyboru i bez wyboru:

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

Sprawdź, czy tego chcesz, i połącz to z pomysłami innych. Nigdy nie możesz być zbyt pewny.

xaddict
źródło
2
oh patrz - [email protected] - jest adres e-mail w postaci zwykłego tekstu.
Alister Bulman
1

I moja funkcja. Stworzyłem go, patrząc na odpowiedzi zamieszczone w tym temacie.

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

Wykorzystuje dwie metody: od prawej do lewej reż i pisanie javascript.

PAM
źródło
1

Opcja 1: Podziel adres e-mail na wiele części i utwórz tablicę w JavaScript z tych części. Następnie połącz te części we właściwej kolejności i użyj właściwości .innerHTML, aby dodać adres e-mail do strony internetowej.

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

Opcja 2: użyj obrazu zamiast tekstu wiadomości e-mail

Strona twórcy obrazu z tekstu: http://www.chxo.com/labelgen/

Opcja 3: Możemy użyć AT zamiast „@” i DOT zamiast „.”

tj .:

 info(AT)XXXabc(DOT)com 
saun4frsh
źródło
1
Myślę, że opcja 1 nie jest dobrą opcją. Parser działający razem z botem może z łatwością obliczyć wartość innerHTML, a opcja 3 prawdopodobnie nie jest tak dobra, ponieważ inteligentny bot może to ustalić. Myślę, że opcja 2 jest najlepsza.
John Sonderson
1

Nie lubię mieszania JavaScript i HTML, dlatego używam tego rozwiązania. Na razie działa mi dobrze.

Pomysł : możesz to skomplikować, udostępniając zaszyfrowane informacje w dataatrybutach i odszyfrowując je w JS. Odbywa się to po prostu przez zamianę liter lub odwrócenie ich.

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

Wypróbuj: http://jsfiddle.net/x6g9L817/

Pan B.
źródło
1

co z HTML_CHARACTER ?:

joe&#064;mail.com

wyjścia

joe@mail.com
tazo todua
źródło
1
Adres e-mail nie jest klikalny w ten sposób, a umieszczenie symbolu @ nie będzie kuloodporne, ponieważ nie zawsze będzie wyglądało tak samo, jak w przypadku umieszczenia w wierszu.
Brent O'Connor,
0

Oto proste rozwiązanie tego problemu:

<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>
Haluk
źródło
0

Najbardziej podoba mi się odpowiedź ofauraxa, ale zmodyfikowałbym ją, aby uzyskać nieco bardziej ukryty e-mail:

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"
Donny
źródło
0

Muszę tylko podać inną odpowiedź. Właśnie wymyśliłem coś fajnego do zabawy.

Dowiedziałem się, że w wielu popularnych tablicach znaków litery @ i az pojawiają się więcej niż jeden raz. Możesz zamapować oryginalne znaki na nowe mapowania i utrudnić robotom spamującym ustalenie, czym jest e-mail.

Jeśli przejdziesz przez ciąg i otrzymasz kod litery, a następnie dodasz 65248 i zbudujesz encję HTML na podstawie liczby, otrzymasz adres e-mail czytelny dla człowieka.

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

Oto działające skrzypce: http://jsfiddle.net/EhtSC/8/

Możesz poprawić to podejście, tworząc bardziej kompletny zestaw odwzorowań między postaciami, które wyglądają tak samo. Ale jeśli na przykład skopiujesz / wkleisz wiadomość e-mail do notatnika, otrzymasz wiele skrzynek.

Aby rozwiązać niektóre z problemów związanych z wrażeniami użytkowników, utworzyłem wiadomość e-mail jako link. Po kliknięciu ponownie mapuje znaki z powrotem do ich oryginałów.

Aby to poprawić, możesz tworzyć bardziej złożone mapowania znaków, jeśli chcesz. Jeśli możesz znaleźć kilka znaków, których można użyć na przykład w miejscu „a”, dlaczego nie losowe odwzorowanie na nie.

Prawdopodobnie nie jest to jak dotąd najbezpieczniejsze podejście, ale naprawdę dobrze się bawiłem, grając z nim: D

Jani Hyytiäinen
źródło