Saya telah menghabiskan beberapa hari terakhir bekerja untuk memperbarui situs web pribadi saya. URL dari situs pribadi saya adalah (nama depan saya). (Nama belakang saya) .com, karena nama belakang saya agak tidak biasa, dan saya cukup beruntung untuk mengambil nama domain tersebut. Alamat email saya adalah (nama depan saya) @ (nama belakang saya) .com. Jadi sungguh, ketika harus menebaknya, itu tidak terlalu sulit.
Bagaimanapun, saya ingin mengintegrasikan tautan mailto: ke situs web saya, sehingga orang dapat menghubungi saya. Dan, meskipun alamat email saya tidak terlalu sulit ditebak, saya lebih suka tidak diambil oleh bot spam yang hanya merayapi situs web untuk pola alamat email dan menambahkannya ke database mereka.
Apa cara terbaik bagi saya untuk mengaburkan alamat email saya, sebaiknya dalam bentuk tautan? Metode yang saya ketahui adalah:
<a href="mailto:[email protected]">e-mail me</a>
Ini berfungsi, tetapi itu juga berarti bahwa begitu situs web saya mengenai Google, saya akan melewati spam karena bot spam dengan mudah menemukan alamat email saya.
<img src="images/e-mail.png" />
Ini kurang diminati, karena pengunjung tidak hanya tidak dapat mengkliknya untuk mengirimi saya email, tetapi bot spam yang lebih cerdas mungkin akan dapat mendeteksi karakter yang terkandung dalam gambar.
Saya tahu bahwa mungkin tidak ada solusi yang tepat, tetapi saya hanya ingin tahu apa yang menurut semua orang terbaik. Saya pasti bersedia menggunakan JavaScript jika perlu, karena situs web saya sudah memanfaatkan banyak sekali.
sumber
Jawaban:
Saya menyandikan karakter sebagai entitas HTML ( seperti ini ). JS tidak perlu diaktifkan dan sepertinya telah menghentikan sebagian besar spam. Saya kira bot pintar mungkin masih memanennya, tetapi saya tidak punya masalah.
sumber
Secara pribadi, saya sudah menyerah untuk menyembunyikan alamat email saya. Saya merasa lebih mudah untuk mencari solusi pemfilteran spam yang lebih baik daripada khawatir tentang pengaburan. Anda bisa menghabiskan waktu berhari-hari untuk mencoba menemukan cara terbaik untuk mengaburkan alamat Anda, dan yang diperlukan hanyalah satu orang untuk menjual alamat Anda ke spammer dan semua pekerjaan itu tidak berguna.
sumber
Solusi yang diterima saat ini adalah membuat formulir kontak yang memungkinkan pengguna mengirimi Anda email. Jika Anda menerima banyak spam dari itu (saya tidak ada di situs saya), maka Anda dapat menambahkan captcha untuk ukuran yang baik, dan Anda akan jauh dari "buah gantung rendah" pada saat itu.
Faktanya adalah bahwa jika Anda menyediakan tautan yang dapat diklik pengguna untuk membuka klien email mereka dengan alamat Anda di bidang Kepada :, maka komputer dapat menguraikan alamat email dari laman dan begitu juga bot spam.
sumber
Anda menyebutkan ini untuk situs pribadi Anda. Di situs pribadi saya (misalnya, bobsomers.com) saya hanya memiliki paragraf yang mengatakan ini:
Orang-orang tampaknya dapat mengetahuinya dengan baik, karena saya mendapatkan email yang sah setiap saat. Terkadang solusi terbaik tidak memerlukan penulisan kode apa pun. :)
sumber
Cara ringan untuk mengaburkan
href
jangkar adalah dengan menyandikannya dengan base64:> btoa('mailto:[email protected]') < "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"
Dan kemudian memasukkannya dengan hardcode:
<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>
Atau secara dinamis sisi server misalnya di PHP:
<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:[email protected]") ?>')">E-Mail</a>
Dalam kombinasi dengan pengembalian string, ini bisa sangat menghemat spam:
<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:[email protected]") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("[email protected]") ?></a>
sumber
Ternyata menggunakan CSS untuk mengubah arah teks Anda bekerja dengan cukup baik. Tautan itu juga memiliki pengujian dari banyak metode kebingungan lainnya.
Apapun yang Anda gunakan pasti akan kalah. Tujuan utama Anda adalah untuk tidak mengganggu pengguna Anda.
sumber
Jangan gunakan teknik kebingungan apa pun di sini karena ini mungkin tempat pertama para pemanen email akan mencari tahu bagaimana orang-orang mengaburkan email. Jika Anda ingin alamat email Anda terlihat di situs, jangan hanya menyalin kata demi kata metode orang lain; mengaburkannya dengan cara unik yang belum pernah digunakan situs lain sehingga metode Anda tidak akan diketahui pemanen sebelum mereka mengunjungi situs Anda.
sumber
Anda dapat melakukan seperti yang dilakukan Google di Google Code (dan Grup). Tampilkan par tof email, dan bagian yang dapat diklik ("..."). Mengklik yang menunjukkan Anda ingin mengetahui email tersebut, dan Anda diminta untuk mengisi captcha. Setelah itu email (dan lainnya?) Terlihat oleh Anda.
sumber
milik saya sebenarnya sederhana:
<h3 id="email">[email protected]</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>'); });
sumber
Saya menggunakan obfuscation JavaScript, lihat yang ini sebagai contoh:
http://www.jottings.com/obfuscator/
sumber
Satu situs web yang saya kelola menggunakan cara JavaScript yang agak sederhana (mudah-mudahan) mencegah spambots keluar.
Tautan email memanggil fungsi JS:
Untuk memastikan hanya pengguna yang mengaktifkan JS yang dapat melihat tautan, tulis dengan ini:
Penggunaan satu fungsi JS untuk menulis tautan yang memanggil yang lain berarti ada dua lapisan perlindungan.
sumber
Seperti yang dikatakan poster di atas, saya juga menggunakan obfuscation JavaScript dari situs web jottings .
Halaman web menghasilkan beberapa JavaScript yang dapat ditingkatkan. The
mailto:
teks string di jelas dan diidentifikasi oleh robot (yang bisa melihat ini dan unobfuscate string ini), tetapi jika salah satu masuk ke dalam jottings.com halaman web alamat email dari bentukmailto:[email protected]
bukan[email protected]
dan kemudian menghapus teksmailto:
dari JavaScript yang dihasilkan, seseorang tiba-tiba memiliki beberapa JavaScript yang tampaknya tidak ada hubungannya dengan email sama sekali - hanya JavaScript acak yang webnya penuh. Seseorang dapat meningkatkan ini lebih jauh dengan menghilangkan teks tautan - Saya mengganti milik saya dengan gambar alamat email saya yang dalam font yang cukup tidak jelas. Kemudian untuk berjaga-jaga jika metode ini di jottings.com menjadi populer, saya mengacak nama variabel di output JavaScript untuk menyulitkan robot untuk melihat contoh dari jottings yang dihasilkan kode JavaScript.Jelas beberapa perbaikan ini dapat dibangun ke dalam mekanisme pencatatan itu sendiri, dan karena kodenya tersedia secara terbuka, ini akan relatif mudah.
Sebuah contoh mungkin membuat ini sedikit lebih jelas. Saya menggunakan Obfuscator Jottings pada tautan di atas untuk mengaburkan
mailto:[email protected]
(catatan saya menipu maksud asli situs web Jottings dengan memasukkan stringmailto:[email protected]
alih-alih[email protected]
) dengan teks "Send Me Email", yang diubah menjadi Javascript ini:<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>
Setelah saya mendapatkannya kembali, saya menempelkannya ke editor dan:
mailto:
Saya berakhir dengan ini:
<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> </font></p> </noscript>
sumber
Saya tidak seberapa baik ini akan berhasil. Tidak bisakah Anda meninggalkan alamat email Anda dan membuatnya dimuat menggunakan panggilan AJAX setelah halaman selesai dimuat. Tidak yakin apakah bot spam dapat mengambil HTML yang telah diubah atau apakah mereka cukup pintar untuk mendengarkan lalu lintas HTTP lain untuk mencoba dan memilih alamat email atau apakah mereka hanya memindai halaman seperti yang diterima pertama kali.
sumber
Seorang pria menguji sembilan cara berbeda dalam menampilkan alamat email di halaman dan kemudian mempublikasikan hasilnya di blognya.
Tiga cara terbaiknya adalah:
Peringatan - ini telah diposting dua tahun lalu. Bot spam mungkin semakin pintar.
sumber
Jika Anda bekerja dengan PHP, Anda dapat mengambil skrip gratis yang melakukannya secara otomatis. Ini disebut "Private Daddy" dan kami menggunakannya untuk layanan streaming audio online kami sendiri. Hanya satu baris kode dan berhasil di luar kotak ... Anda dapat mengambilnya di sini
sumber
Pendekatan lain bisa dengan menggunakan kerangka JavaScript dan mengikat data / model ke elemen HTML. Dalam kasus AngularJS, elemen HTML akan ditulis sebagai:
<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>
Pengikatan {{data}} interpolasi menggunakan variabel cakupan yang berisi nilai email sebenarnya. Selain itu, filter juga dapat digunakan yang menangani decoding email sebagai berikut:
<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>
Manfaatnya ada pada cara penulisan HTML. Sisi negatifnya adalah ia membutuhkan dukungan scripting yang beberapa mungkin tidak, tidak.
hanyalah pendekatan lain.
sumber
Menggunakan JQuery, tetapi dapat dengan mudah di-porting ke JS biasa jika diperlukan. Akan mengambil blok HTML berikut. Contoh yang saya berikan ini juga untuk
tel:
tautan untuk panggilan telepon.<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>
dan mengubahnya menjadi tautan yang tepat menggunakan Javascript.
Saya mendokumentasikannya lebih detail di sini https://trajano.net/2017/01/obfuscating-mailto-links/
Algoritme de / obfuscation cukup sederhana sehingga tidak terlalu berat untuk menulis (tidak perlu parsing base64)
sumber
Solusi panggilan Ajax
Yang terbaik adalah memiliki formulir di situs web dan tidak menunjukkan alamat email, karena semua robot semakin pintar dari hari ke hari, tetapi jika Anda perlu menunjukkan alamat email di situs web, jadi, Anda dapat membuatnya dengan panggilan ajax di Anda. server, dan tunjukkan saat diklik.
HTML
<a class="obfmail" href="#" rel="info">click here to show email address</a>
atau
<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]' )); }
Untuk keamanan yang lebih, Anda dapat mengubah
.on
dengan.one
seperti ini$(document).one('click', '.obfmail', function(e) {
atau bahkan bekerja dengan PHP dihasilkan token yang Anda lulus menjadi data panggilan ajax, untuk hanya menerima satu panggilan dari fungsi ajax seperti ini:html:
<a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">
jquery:
... addr = a.attr('rel'); tkn = a.attr('token'); $.ajax({ data: { email: addr, token: tkn }, ...
.
.
sumber
Sejujurnya, masalah Anda mungkin diperdebatkan jika Anda ditanyai apakah mailto benar-benar yang ingin Anda gunakan atau tidak. Banyak orang yang menggunakan email web, misalnya, atau tidak memiliki pengaturan klien email yang tepat di browser mereka tidak akan mendapatkan keuntungan dari mailto. Anda mengekspos alamat email Anda untuk suatu fungsi yang tidak akan berfungsi untuk sebagian besar pengguna Anda.
Yang bisa Anda lakukan adalah menggunakan formulir untuk mengirim email di belakang layar sehingga alamat email disembunyikan dan Anda tidak perlu khawatir tentang orang-orang miskin yang tidak akan mendapatkan keuntungan dari mailto.
sumber
Jika Anda mengatakan di situs Anda bahwa "Alamat email saya adalah (nama depan saya) @ (nama belakang saya) .com.", Dan nama depan serta nama belakang Anda sangat jelas, tampaknya itu adalah perlindungan spam terbaik Anda akan mendapatkan.
sumber
Jika ada yang menggunakan Rails, mereka dapat menggunakan
actionview-encoded_mail_to
permata itu. ( https://github.com/reed/actionview-encoded_mail_to )Ada beberapa pilihan:
sumber
<!-- Multi-Email Obfuscator --> <!-- step 1: @ = @ --> <!-- step 2: a scrap element --> <!-- step 3: ROT13 encode for .com --> info<!-- step 1 -->@<!-- 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>
sumber
Cloudflare sekarang menawarkan layanan obfuscation email gratis . Ini mungkin menjadi pilihan jika Anda menggunakan Cloudlfare.
sumber
Karena solusi ini tidak disebutkan di mana pun, tetapi berfungsi dengan baik untuk saya:
Saya melakukan ini:
buat tautan mailto dengan email palsu. Saya suka [email protected] karena alasan yang jelas: Spammer mungkin mengirim spam ke botnetnya sendiri saat menggunakan alamat ini tidak dicentang.
cypher alamat email asli dan letakkan di rentang tersembunyi yang tidak terkait tetapi dapat ditemukan atau elemen apa pun yang Anda suka. Jelas untuk mengaburkan email dan menyembunyikannya dari pemanen. Bergantung pada struktur proyek Anda, Anda bahkan mungkin ingin memasukkannya ke dalam variabel JS atau Sesi.
buat penangan klik untuk tautan ini setelah beberapa saat yang mendekripsikan dan menulis alamat email yang benar ke tautan mailto palsu yang tidak mencegah default. Menurut saya perayap tidak mengeklik tautan mailto, tetapi jika mereka mau, mereka mungkin tidak akan menunggu sedetik pun, sementara manusia harus sangat cepat mengeklik tautan di detik pertama setelah pemuatan halaman.
Sekarang Anda memiliki tautan mailto yang berfungsi penuh tetapi dikaburkan, disederhanakan, dan diamankan dengan waktu.
Contoh kerja file 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>
Semoga kode itu bersama Anda.
sumber
Bagaimana jika membuat tautan "Hubungi saya" yang mengarah ke direktori yang dilindungi kata sandi? Tentu saja, Anda harus memberikan izin untuk mengakses.
"Hubungi saya"> •••••••••••> contact / index.html
Setelah diakses, halaman contact / index.html menampilkan email tersebut, misalnya mailto.
sumber
Solusi saya adalah mengatur ulang karakter menggunakan css dan mengganti elemen pada hover. Tidak ada perubahan yang terlihat oleh pengguna.
const obscureHoverReverseMailTo = input => `<span style="display: inline-flex; color: rgb(0, 0, 238); cursor: pointer; text-decoration: underline;" onmouseover="const newContent = [...this.children].sort((a, b) => a.style.order - b.style.order).map(el => el.innerText).join('');this.outerHTML = \`<a href='mailto: \${newContent}'>\${newContent}</a>\`">${input.split("").map((char, index) => `<span style="order: ${index}">${char}</span>`).sort(() => 0.5 - Math.random()).join("")}</span>`;
const obscureHoverReverseMailTo = input => `<span style="display: inline-flex; color: rgb(0, 0, 238); cursor: pointer; text-decoration: underline;" onmouseover="const newContent = [...this.children].sort((a, b) => a.style.order - b.style.order).map(el => el.innerText).join('');this.outerHTML = \`<a href='mailto: \${newContent}'>\${newContent}</a>\`">${input.split("").map((char, index) => `<span style="order: ${index}">${char}</span>`).sort(() => 0.5 - Math.random()).join("")}</span>`; document.getElementById("testRoot").innerHTML = obscureHoverReverseMailTo("[email protected]")
<div id="testRoot"></div> <input type="text" onkeyup="document.getElementById('testOut').innerHTML = obscureHoverReverseMailTo(this.value)"> <div id="testOut"></div>
inilah fungsinya jika Anda memiliki sesuatu yang disembunyikan:
const obscureHoverReverse = input => `<span style="display: inline-flex" onmouseover="this.outerHTML = [...this.children].sort((a, b) => a.style.order - b.style.order).map(el => el.innerText).join('')">${input.split("").map((char, index) => `<span style="order: ${index}">${char}</span>`).sort(() => 0.5 - Math.random()).join("")}</span>`;
sumber
Saya setuju dengan @srobinson karena menggunakan formulir online untuk pengkodean ke entitas html tampaknya sedikit teduh. Beberapa baris python akan melakukannya untuk Anda:
def htmlEntities( string ): return ''.join(['&#{0};'.format(ord(char)) for char in string]) htmlEntities("[email protected]")
pengembalian di atas:
'barnstable@example.com'
Yang [email protected] dikodekan ke Entitas HTML (diapit oleh tanda kutip tunggal).
sumber
Saya menggunakan fungsi PHP untuk menghasilkan beberapa javascript untuk menampilkan email saat pemuatan halaman. Perhatikan bahwa Anda tidak memerlukan PHP untuk menghasilkan JS saat runtime, Anda dapat membuat JS satu kali secara lokal dan kemudian menyertakan JS statis di halaman Anda.
Anda juga dapat menggunakan fungsi tertaut dengan cuplikan di bawah ini untuk secara otomatis mengaburkan alamat email di beberapa HTML tertentu (di mana $ processingContent adalah 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); }
sumber
Lihat ini .
'Formulir Enkoder' akan mengenkripsi alamat Email Anda dan mengubah hasilnya menjadi JavaScript yang mengevaluasi sendiri, menyembunyikannya dari robot pemanen Email yang merayapi web untuk mencari alamat yang terbuka. Alamat Anda akan ditampilkan dengan benar oleh browser web, tetapi secara virtual tidak dapat diuraikan oleh robot pemanen Email.
sumber