Metode yang efektif untuk menyembunyikan email dari bot spam


195

Di beranda saya, saya menggunakan metode ini untuk menyembunyikan email saya dari bot spam:

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

Apa yang Anda pikirkan? Apakah ini efektif? Apa metode lain yang Anda ketahui atau gunakan?


Entah ini merupakan duplikat dari stackoverflow.com/questions/163628/… , atau yang lainnya tidak valid karena daftar panjang wiki non komunitas.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

5
Yang ini memiliki lebih banyak suara positif, jawaban, dan tampilan. Itu tidak boleh ditutup untuk mendukung orang lain yang memiliki kurang upvotes, jawaban dan pandangan.
abatishchev

1
Saya akan menutup yang itu untuk mengikuti fakta yang ini menarik lebih banyak.
abatishchev

6
Solusi terbaik adalah tidak membagikan solusi Anda . Sayangnya ini adalah pertanyaan semacam itu. Cara terbaik untuk menemukan solusi Anda dan simpan untuk diri sendiri. Jika seseorang distandarisasi, robot spam akan disesuaikan untuk mengatasinya.
Dimitris

1
Solusi terbaik adalah dengan menggabungkan beberapa solusi di bawah ini , mis. Bagian pertama dari email sebagai gambar, bagian kedua, bagian this.href.replace(/x/g,'')ketiga hex disandikan, dll alamat email.

Jawaban:


98

Ini adalah metode yang saya gunakan, dengan sisi server termasuk, misalnya di <!--#include file="emailObfuscator.include" -->mana emailObfuscator.includeberisi yang berikut ini:

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

Untuk memasukkan alamat, saya menggunakan 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>

Karena saya telah mendapatkan email melalui Gmail sejak 2005, spam bukan masalah. Jadi, saya tidak dapat berbicara tentang seberapa efektif metode ini. Anda mungkin ingin membaca studi ini (meskipun sudah lama) yang menghasilkan grafik ini:

masukkan deskripsi gambar di sini


Mengapa Anda perlu menyertakan sisi server emailObfuscator.include? Bukankah itu sama dengan menuliskannya dalam format .html? (mungkin itu hanya contoh?) Juga mengapa Anda menggunakan komentar html <!-- -->di dalam skrip? Dan akhirnya mengapa salah satu dari <script>tag Anda adalah huruf kecil sedangkan yang lainnya adalah huruf besar <SCRIPT>? Apakah metode ini membantu membingungkan bot atau sesuatu?
Templar

@Templar SSI tidak diperlukan, juga tidak membingungkan bot sejauh yang saya tahu. Itu membuat (membuat) situs saya modular (tidak benar-benar menggunakan metode ini lagi). Komentar itu mengutip sumber dari mana saya menemukan retasan (sekarang tautan rusak). Perubahan dalam kasus ini hanya kebetulan. Jika itu membingungkan bot, semua lebih baik, tapi saya ragu itu punya efek.
Fuhrmanator

4
Studi yang lebih baru dan lengkap mengeksplorasi ide yang sama: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

95

Bekerja dengan konten dan attr dalam 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>

Ketika javascript dinonaktifkan, hanya acara klik tidak akan berfungsi, email masih ditampilkan.

Pendekatan lain yang menarik (setidaknya tanpa acara klik) adalah memanfaatkan tanda kanan-ke-kiri untuk mengganti arah penulisan. lebih lanjut tentang ini: https://en.wikipedia.org/wiki/Right-to-left_mark


6
Ini membutuhkan lebih banyak acungan jempol.
heXer

Tidak yakin mengapa tetapi meskipun solusi ini terlihat cukup mengesankan, gagal memicu klien email saya. Inilah biola yang bisa Anda uji: jsfiddle.net/wd436tg3
Ricardo Zea

1
@ RicardoZea browser mana yang Anda gunakan? biola Anda berfungsi dengan baik untuk saya di chrome, ie11, edge dan firefox
cyptus

3
Luar biasa. Tetapi tambahkan "; return false" ke acara onclick. Ini akan mencegah penambahan # yang jelek ke URL browser (dengan membatalkan tautan href asli)
T4NK3R

5
NAMUN - Saya tidak bisa menyalin alamat surat (terlihat) secara manual (di Chrome, Firefox atau Edge)?
T4NK3R

83

Lihatlah cara ini , cukup pintar dan menggunakan css.

CSS

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

HTML

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

CSS di atas kemudian akan mengesampingkan arah membaca dan menyajikan teks kepada pengguna dalam urutan yang benar.

Semoga ini bisa membantu

Bersulang


54
Itu pasti lucu. Namun sayangnya, ini tidak dapat diklik dan tidak akan berfungsi untuk copy / paste, sementara mengabaikan browser non-CSS seperti pembaca braille.
Arjan

Mhh bagus, tapi begitu orang yang menulis crawler melihatnya, itu menjadi tidak berguna.
Mau

6
Mencocokkan alamat email terbalik dengan RegEx sama mudahnya dengan mencocokkannya dengan non-terbalik. Spamming adalah bisnis bernilai miliaran dolar dan spammer bahkan tidak menggunakan siklus CPU sendiri untuk mengikis layar. Bahkan, mereka sudah membaca percakapan ini dan telah menyesuaikan metode mereka. Apa pun yang dapat dibaca komputer akan dapat dibaca oleh bot. Apakah itu dijalankan oleh CSS atau JavaScript.
Jani Hyytiäinen

3
@ JaniHyytiäinen saya tidak setuju. Fakta bahwa mereka tidak membayar untuk CPU, tidak berarti mereka memiliki sumber daya yang tidak terbatas. Jika menjalankan interpreter JS ternyata menghasilkan terlalu sedikit alamat untuk biayanya, mereka akan menonaktifkannya.
o0 '.

1
@ Lohoris: Google melaporkan waktu buka halaman rata-rata (2,45 detik) dan ukuran halaman rata-rata (320 KB), ini memberi Anda gambaran tentang berapa banyak penguraian yang dapat Anda lakukan. Saat utas pengunduhan sedang melakukan permintaan, utas penguraian dapat melakukan uraian. Sebagian besar pengunduhan sedang menunggu. Yang memberi thread dl kemungkinan memeriksa prasyarat sebelum memutuskan untuk mengirimnya ke parser. Misalnya halaman rendering, indexOf ('@'), indexOf ('mailto:'), dll. Thread penguraian hanya akan menerima + -200 karakter di sekitar pertandingan yang akan memungkinkan penguraian yang sangat rumit sehingga 'tampaknya' tidak terbatas di hal kekuatan parsing.
Jani Hyytiäinen

52

Saya memiliki pandangan yang sangat berbeda dalam hal ini. Saya menggunakan MailHide untuk ini.

MailHide adalah sistem dari Google di mana pengguna harus menyelesaikan tes reCAPTCHA untuk kemudian mengungkapkan email kepada mereka.


15
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
showdev

5
Meskipun saya umumnya setuju dengan sentimen ini, dalam hal ini jawabannya adalah menggunakan alat khusus. Jika tautannya hilang, saya akan menghapus jawabannya.
tvanfosson

Terima kasih - ini bagus. Saya menulis sesuatu seperti ini (mengungkapkan tautannya): Kirimi saya email: ungkap
chrs

6
Perhatikan bahwa Google menonaktifkan MailHide pada Pencocokan 2018. Seperti biasa dengan layanan Google "gratis": mereka menawarkannya selama mereka dapat mengambil untung dengan data darinya dan begitu mereka mendapatkan apa yang mereka butuhkan, mereka menjatuhkannya. Perusahaan paling tidak dapat diandalkan untuk menawarkan layanan gratis. Saya akan menjauh dari Google atau layanan orang lain jika Anda perlu menyampaikan apa pun yang Anda coba lakukan.
masi

51

Awalnya bukan ide saya tetapi saya tidak dapat menemukan penulis:

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

Tambahkan x sebanyak yang Anda suka. Ini berfungsi dengan baik untuk membaca, menyalin, dan menempel, dan tidak dapat dibaca oleh bot.


2
Rapi! Tapi bagaimana dengan pengguna seluler?
Bodzio

Mouseover juga terpicu saat Anda menyentuh sebuah tautan. Seharusnya bekerja dengan baik.
Andrew Swift

4
Berfungsi selama alamat Anda tidak mengandung x. :-p Tapi, saya tahu, cukup gunakan huruf yang berbeda.
Dan Henderson

1
Tetapi kemudian, jika javascript dinonaktifkan, Anda memberikan kepada pengguna alamat yang tidak ada yang akan mengembalikan Anda sebagai pelanggan / pengguna.
Xeevis

34
Jika javascript dinonaktifkan, tidak ada situs saya yang berfungsi sama sekali ;-)
Andrew Swift

16

Saya pikir satu-satunya metode yang sangat mudah Anda miliki adalah membuat halaman Hubungi Saya yang merupakan formulir yang mengirimkan naskah yang dikirimkan ke alamat email Anda. Dengan begitu, alamat Anda sama sekali tidak pernah terekspos ke publik. Ini mungkin tidak diinginkan karena beberapa alasan, tapi saya pikir itu solusi yang cukup bagus. Ini sering membuat saya kesal ketika saya dipaksa untuk menyalin / menempel alamat email seseorang dari situs mereka ke klien email saya dan mengirim mereka pesan; Saya lebih suka melakukannya dengan benar melalui formulir di situs mereka. Juga, pendekatan ini memungkinkan Anda mengirim komentar anonim kepada Anda, dll. Pastikan untuk melindungi formulir Anda menggunakan semacam skema anti-bot, seperti captcha. Ada banyak dari mereka yang dibahas di sini pada SO.


6
Satu-satunya masalah dengan ini adalah bahwa Anda tidak memiliki salinan pesan yang Anda kirim kecuali Anda meluangkan waktu untuk menyalin dan menempelkannya di tempat lain. Secara pribadi saya tidak keberatan menyalin dan menempel tetapi untuk masing-masing.
gvkv

6
Adapun pengirim tidak memiliki salinan: untuk banyak jenis formulir di web saya suka opsi untuk mendapatkan salinan sendiri. Namun, seringkali seperti pilihan memungkinkan karena melanggar untuk anonim mengirimkan pesan untuk hanya tentang siapa pun ...
Arjan

12
Ini mungkin menyembunyikan alamat email Anda, tetapi itu tidak akan menghentikan spam sama sekali, kecuali jika Anda mengamankan formulir Anda dengan skrip validasi gambar captcha.
SimonDowdles

1
Anda juga dapat menyelesaikan masalah pengirim yang tidak memiliki salinan dengan menyertakan opsi untuk mengirimnya kepada mereka juga.
steinybot

1
Opsi "Kirim salinan untuk diri sendiri" - secara efektif mengubah formulir menjadi spam-kanon, dengan Anda sebagai pengirim - ide buruk!
T4NK3R


10

Jika Anda memiliki dukungan php, Anda dapat melakukan sesuatu seperti ini:

<img src="scriptname.php">

Dan 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
daripada menggunakan php Anda bisa secara fisik membuat gambar. Dan seperti halnya css invert, Anda masih memiliki masalah untuk tidak dapat diklik dan tidak dapat disalin kecuali menggunakan pena: P
Claudiu

9

Saya tahu jawaban saya tidak akan disukai banyak orang, tetapi tolong pertimbangkan poin-poin yang diuraikan di sini sebelum membolak-balik.

Apa pun yang mudah dibaca mesin akan mudah dibaca mesin oleh spammer. Meskipun tindakan mereka tampak bodoh bagi kita, mereka bukan orang bodoh. Mereka inovatif dan banyak akal. Mereka tidak hanya menggunakan bot untuk memanen email, mereka juga memiliki banyak metode yang tersedia dan sebagai tambahan, mereka hanya membayar daftar email baru yang bagus. Artinya, mereka mendapat ribuan peretas topi hitam di seluruh dunia untuk melakukan pekerjaan mereka. Orang yang siap memberi kode malware yang mengikis layar browser orang lain yang akhirnya membuat metode apa pun yang ingin Anda capai tidak berguna. Utas ini telah dibaca oleh 10+ orang seperti itu dan mereka menertawakan kami. Beberapa dari mereka bahkan bosan menangis untuk mengetahui bahwa kita tidak dapat memberikan tantangan baru kepada mereka.

Ingatlah bahwa Anda pada akhirnya tidak berusaha menghemat waktu Anda tetapi waktu orang lain. Karena itu, harap pertimbangkan untuk menghabiskan waktu ekstra di sini. Tidak ada peluru ajaib yang mudah dieksekusi yang akan bekerja. Jika Anda bekerja di perusahaan yang mempublikasikan email 100 orang di situs tersebut dan Anda dapat mengurangi 1 email spam per hari per orang, kami berbicara tentang 36500 email spam setahun. Jika menghapus e-mail seperti itu membutuhkan rata-rata 5 detik, kita berbicara tentang 50 jam kerja per tahun. Belum lagi jumlah gangguan berkurang. Jadi, mengapa tidak menghabiskan beberapa jam untuk ini?

Bukan hanya Anda dan orang-orang yang menerima email yang menganggap waktu sebagai aset. Karena itu, Anda harus menemukan cara untuk mengaburkan alamat email sedemikian rupa, sehingga tidak terbayar untuk memecahkannya. Jika Anda menggunakan beberapa metode yang banyak digunakan untuk mengaburkan email, itu benar-benar terbayar untuk memecahkannya. Karena sebagai hasilnya, cracker akan mendapatkan ribuan, jika tidak puluhan atau ratusan ribu email baru. Dan bagi mereka, mereka akan mendapat uang.

Jadi, silakan dan kode metode Anda sendiri. Ini adalah kasus yang jarang terjadi dimana reinventing the wheel benar-benar terbayar. Gunakan metode yang tidak dapat dibaca oleh mesin dan metode yang lebih disukai membutuhkan interaksi pengguna tanpa mengorbankan pengalaman pengguna.

Saya menghabiskan sekitar 20 menit untuk memberikan contoh tentang apa yang saya maksud. Dalam contoh, saya menggunakan KnockoutJS hanya karena saya menyukainya dan saya tahu Anda mungkin tidak akan menggunakannya sendiri. Tapi toh itu tidak relevan. Ini adalah solusi khusus yang tidak banyak digunakan. Memecahkannya tidak akan menghasilkan hadiah karena melakukannya karena metode melakukannya hanya akan bekerja pada satu halaman di internet yang luas.

Ini biola: http://jsfiddle.net/hzaw6/

Kode di bawah ini tidak dimaksudkan sebagai contoh kode yang baik. Tetapi hanya contoh kode yang cepat yang sangat sulit bagi mesin untuk mengetahui kami bahkan menangani surel di sini. Dan bahkan jika itu bisa dilakukan, itu tidak akan membuahkan hasil untuk dieksekusi dalam skala besar.

Dan ya, saya tahu itu tidak berfungsi pada IE = lte8 karena 'Tidak dapat mendapatkan properti' atribut 'dari referensi yang tidak terdefinisi atau nol' tapi saya tidak peduli karena itu hanya demo metode, bukan implementasi aktual, dan tidak dimaksudkan untuk digunakan pada produksi apa adanya. Jangan ragu untuk membuat kode sendiri yang lebih dingin, secara teknis lebih solid, dll.

Oh, dan tidak pernah menyebut nama surat atau email dalam html atau javascript. Hanya saja terlalu mudah untuk mengikis DOM dan objek jendela untuk apa pun yang bernama email atau email dan memeriksa apakah itu berisi sesuatu yang cocok dengan email. Inilah sebabnya mengapa Anda tidak ingin variabel apa pun yang akan berisi email dalam bentuk lengkapnya dan ini juga mengapa Anda ingin pengguna berinteraksi dengan halaman sebelum Anda menetapkan variabel tersebut. Jika model objek javascript Anda berisi alamat email apa pun pada status siap DOM, Anda memaparkannya kepada spammer.

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

8

Salah satu metode favorit saya adalah mengaburkan alamat email menggunakan php, contoh klasiknya adalah mengonversi karakter ke nilai HEX seperti:

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

Dan kemudian di markup saya, saya akan menyebutnya sebagai berikut:

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

Kemudian periksa sumber Anda, Anda akan terkejut!


Itu contoh yang bagus. Terima kasih. Adakah petunjuk tentang SpamBots menggunakan decoding HEX?
jasonflaherty

7

Anda dapat mencoba menyembunyikan karakter menggunakan entitas html di hexa (mis: & # x40 untuk @). Ini adalah solusi yang nyaman, karena browser yang benar akan menerjemahkannya, dan Anda dapat memiliki tautan normal. Kekurangannya adalah bahwa bot dapat menerjemahkannya secara teori, tetapi ini agak tidak biasa. Saya menggunakan ini untuk melindungi email saya di blog saya.

Solusi lain adalah dengan menggunakan javascript untuk mengumpulkan bagian dari alamat dan untuk memecahkan kode on-the-fly alamat. Kekurangannya adalah browser yang dinonaktifkan dengan javascript tidak akan menampilkan alamat Anda.

Solusi yang paling efektif adalah menggunakan gambar , tetapi itu menyebalkan bagi pengguna harus menyalin alamat dengan tangan.

Solusi Anda cukup bagus , karena Anda hanya menambahkan kelemahan (menulis secara manual @) hanya untuk pengguna yang menonaktifkan javascript. Anda juga bisa lebih aman dengan:

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

5

Spambot tidak akan menafsirkan ini, karena ini adalah metode yang kurang dikenal :)

Pertama, tentukan css:

email:before {
    content: "admin";
}

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

Sekarang, di mana pun Anda ingin menampilkan email Anda, cukup masukkan HTML berikut:

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

Dan tada!


Ini berfungsi, tetapi tidak mendukung copy paste, yang dapat mempengaruhi kegunaan bagi sebagian besar pengguna
Iruku Kagika

4

Saya menggunakan kombinasi CSS dan jQuery yang sangat sederhana yang menampilkan alamat email dengan benar kepada pengguna dan juga berfungsi ketika jangkar diklik atau di-hover:

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

Berikut ini contoh kerjanya.


apakah ini akan menampilkan nilai href yang benar di bilah status peramban saat tautan melayang?
Nik O'Lai

Ya, itu menunjukkan nilai href yang benar ketika tautan di-hover. Itu sebabnya metode jQuery. Melayang perlu diimplementasikan.
Sergiu

Sayangnya, tidak, itu tidak menunjukkan nilai href yang benar, setidaknya, ketika Anda mengarahkan tautan pertama kali (itu adalah me@example.spam). Pada hover kedua semuanya baik-baik saja. Uji dengan tautan Anda sendiri.
Nik O'Lai

1
Ini bekerja di Chrome dan IE. Sepertinya hanya di Firefox, di hover pertama, bilah status tidak diperbarui. Saya akan mencoba mencari solusi untuk Firefox.
Sergiu

1
Begitu ya, sebenarnya saya suka yang ini.
Eric Bishard

3

! - Menambahkan ini untuk referensi, tidak tahu seberapa ketinggalan informasinya, tetapi ini menceritakan tentang beberapa solusi sederhana yang tidak memerlukan penggunaan skrip apa pun.

Setelah mencari sendiri, saya menemukan halaman ini tetapi juga halaman-halaman ini:

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

coba membalikkan alamat email

Contoh HTML biasa:

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

Efek yang sama menggunakan CSS

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

Menggabungkan ini dengan metode yang disebutkan sebelumnya bahkan dapat membuatnya lebih efektif


3

Salah satu solusi mudah adalah dengan menggunakan entitas HTML alih-alih karakter yang sebenarnya. Misalnya, "me@example.com" akan dikonversi menjadi:

<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
Coba google.se/search?q=HTML+entities+converter yang seharusnya membuat Anda sibuk;)
grapefrukt

1
Google dapat menemukan Anda banyak halaman untuk itu. Salah satu contoh: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
Tapi tidak bisakah bot dengan mudah regex itu juga?
gargantuan

20
Aduh, contoh me @ stack ... sebaiknya ditulis sebagai me@example.com, me@example.net atau me@example.org - itu adalah satu-satunya nama domain yang bukan pemilik harus digunakan dalam contoh!
Arjan

4
Tidak begitu efektif, menurut techblog.tilllate.com/2008/07/20/…
Fuhrmanator

3

Ini versi kerja saya:


Buat wadah dengan teks fallback:

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

Dan tambahkan di bagian bawah DOM (wrt rendering) potongan berikut:

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

Itu menambahkan hyperlink yang dihasilkan ke wadah yang ditentukan:

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

Selain itu di sini adalah versi yang diperkecil:

<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

Metode terbaik untuk menyembunyikan alamat email hanya baik sampai programmer bot menemukan "penyandian" ini dan mengimplementasikan algoritma dekripsi.

Opsi JavaScript tidak akan berfungsi lama, karena ada banyak crawler yang menerjemahkan JavaScript.

Tidak ada jawaban, imho.


Apakah ada perayap yang menafsirkan JavaScript? Satu metode pengkodean JavaScript saya tampaknya bekerja dengan baik untuk saya selama beberapa tahun terakhir - tingkat spam saya cukup stabil ~ 4 / minggu, jadi saya tidak khawatir tentang alamat orang lain yang saya percayakan pada metode ini. Haruskah saya?
Kev

Yang pasti, mungkin mengecualikan banyak crawler, tetapi saya, jika saya membuat sebuah crawler alamat, saya akan menerapkan lib JavaScript :)
guerda

lebih banyak upaya daripada yang mungkin Anda pikirkan
pengecut anonim

Google merayapi beberapa JS sekarang.
Alister Bulman

2

Mungkin ada bot yang mengenali [at]dan penyamaran lainnya sebagai @simbol. Jadi ini bukan metode yang sangat efektif.

Tentu Anda dapat menggunakan beberapa penyandian seperti penyandian URL atau referensi karakter HTML (atau keduanya):

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

Tetapi karena legal untuk menggunakannya, setiap browser / klien e-mail harus menangani pengkodean ini juga.


Sepenuhnya setuju, spammer adalah orang "pintar", setelah bertahun-tahun orang menambahkan [pada] atau [titik] di tempat sintaks, tentu saja mereka akan memiliki algoritma yang mengambil pola-pola ini.
SimonDowdles

Bagaimana dengan mendekode nilai HEX ini?
jasonflaherty

2

Saya penggemar SpamSpan - ini dikaburkan, tetapi masih dapat diuraikan jika JS dinonaktifkan. Tampaknya berfungsi juga, meskipun saya baru menggunakannya selama sekitar satu tahun di situs web dengan lalu lintas rendah.

Ada juga modul untuk Drupal untuk secara otomatis mengubah email menjadi SpamSpans, jika Anda memerlukannya.


1

Apakah itu berfungsi jika saya mengklik kanan tautan dan memilih "salin URL"? Jika tidak, ini bukan situasi yang ideal (saya jarang mengklik tautan mailto, lebih suka menyalin alamat email dan menempelkannya ke aplikasi email saya atau di mana pun saya membutuhkannya pada titik waktu tertentu).

Saya dulu cukup paranoid melindungi alamat email saya secara online (UseNet, web dan sejenisnya), tetapi hari ini saya curiga lebih banyak "target yang mungkin untuk spam" sebenarnya dihasilkan dari pencocokan komponen lokal ke domain secara terprogram. Saya mendasarkan hal ini pada kesempatan, melalui log server mail saya. Cenderung ada beberapa upaya pengiriman ke alamat yang tidak ada (termasuk versi terputus dari spam-umpan yang saya gantungkan di UseNet pada akhir 90-an, ketika pengikisan alamat sangat lazim).


1

Setelah menggunakan begitu banyak teknik saya menemukan cara yang mudah dan sangat ramah, bot mencari @ Símbolo dan baru-baru ini mereka mencari variasi itu jadi saya menggunakan 2 teknik

  1. saya menulis email saya pada gambar seperti domaintolls digunakan dan berfungsi dengan baik atau
  2. untuk menggantikan Símbolo (@) dengan gambar yang disukai

@ ganti dan alt gambar akan menjadi alt = "@" sehingga bot akan menemukan gambar dan setiap manusia akan melihatnya sebagai alamat normal sehingga jika ia menyalinnya ia akan menyalin email dan pekerjaannya adalah don sehingga kodenya akan

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


1

Pertama-tama saya akan memastikan alamat email hanya muncul ketika Anda mengaktifkan javascript. Dengan cara ini, tidak ada teks biasa yang dapat dibaca tanpa javascript.

Kedua, Cara menerapkan fitur aman adalah dengan menjauh dari <button>tag. Tag ini membutuhkan sisipan teks di antara tag, yang membuatnya dapat dibaca oleh komputer. Alih-alih coba <input type="button">dengan penangan javascript untuk onClick. Kemudian gunakan semua teknik yang disebutkan oleh orang lain untuk menerapkan notasi email yang aman.

Satu opsi lain adalah memiliki tombol dengan "Klik untuk melihat alamat email". Setelah diklik, perubahan ini menjadi email berkode (karakter dalam kode HTML). Pada klik lain ini mengalihkan ke fungsi 'mailto: email'

Versi terakhir dari ide terakhir, dengan alamat email yang dapat dipilih dan tidak dapat dipilih:

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

Lihat apakah ini sesuatu yang Anda inginkan dan gabungkan dengan ide orang lain. Anda tidak pernah bisa terlalu yakin.


2
oh lihat - me@domain.extension - ada alamat email teks biasa.
Alister Bulman

1

Dan fungsi saya. Saya telah membuatnya mencari jawaban yang ditempatkan dalam topik ini.

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

Ini menggunakan dua metode: dir ke kanan dan menempatkan javascript.


1

Opsi 1: Pisahkan alamat email menjadi beberapa bagian dan buat array dalam JavaScript dari bagian-bagian ini. Selanjutnya, gabungkan bagian-bagian ini dalam urutan yang benar dan gunakan properti .innerHTML untuk menambahkan alamat email ke halaman web.

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

Opsi 2: Gunakan gambar daripada teks email

Situs pencipta gambar dari teks: http://www.chxo.com/labelgen/

Opsi 3: Kita bisa menggunakan AT alih-alih "@" dan DOT alih-alih "."

yaitu:

 info(AT)XXXabc(DOT)com 

1
Saya pikir opsi 1 bukanlah opsi yang baik. Parser yang berjalan di samping bot bisa dengan mudah mengetahui nilai innerHTML, dan opsi 3 mungkin tidak begitu baik karena bot pintar bisa mengetahuinya. Saya pikir opsi 2 adalah yang terbaik.
John Sonderson

1

Saya tidak suka JavaScript dan HTML untuk dicampur, itu sebabnya saya menggunakan solusi ini. Ini berfungsi baik untuk saya, untuk saat ini.

Ide : Anda bisa membuatnya lebih rumit dengan memberikan informasi terenkripsi di data-atribusi dan mendekripsi dalam JS. Ini hanya dilakukan dengan mengganti huruf atau hanya membalikkannya.

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

Cobalah: http://jsfiddle.net/x6g9L817/


1

bagaimana dengan HTML_CHARACTER ?:

joe&#064;mail.com

output

joe@mail.com

1
Alamat email tidak dapat diklik dengan cara ini dan penempatan simbol @ tidak akan anti peluru, dalam hal itu tidak akan selalu terlihat sama seperti jika ditempatkan dalam garis.
Brent O'Connor

0

Berikut ini adalah solusi jquery sederhana untuk masalah ini:

<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

Saya suka jawaban ofaurax terbaik tetapi saya akan memodifikasi ini untuk email yang lebih tersembunyi:

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

0

Saya hanya perlu memberikan jawaban lain. Saya baru saja datang dengan sesuatu yang menyenangkan untuk dimainkan.

Saya menemukan bahwa di banyak tabel karakter umum, huruf @ dan az muncul kembali lebih dari sekali. Anda dapat memetakan karakter asli ke pemetaan baru dan membuatnya lebih sulit bagi bot spam untuk mengetahui apa email itu.

Jika Anda mengulang-ulang string, dan mendapatkan kode karakter surat, lalu menambahkan 65248 ke dalamnya dan membangun entitas html berdasarkan nomor, Anda datang dengan alamat email yang dapat dibaca manusia.

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

Ini biola yang berfungsi: http://jsfiddle.net/EhtSC/8/

Anda dapat meningkatkan pendekatan ini dengan membuat satu set pemetaan yang lebih lengkap antara karakter yang terlihat sama. Tetapi jika Anda menyalin / menempel email ke notepad, misalnya, Anda mendapatkan banyak kotak.

Untuk mengatasi beberapa masalah pengalaman pengguna, saya membuat tautan e-mail sebagai. Ketika Anda mengkliknya, itu akan memetakan kembali karakter ke aslinya.

Untuk meningkatkan ini, Anda dapat membuat pemetaan karakter yang lebih kompleks jika Anda suka. Jika Anda dapat menemukan beberapa karakter yang dapat digunakan misalnya di tempat 'a' mengapa tidak memetakannya secara acak.

Mungkin bukan pendekatan yang paling aman, tetapi saya benar-benar bersenang-senang dengan itu: D

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.