混淆网站上的电子邮件地址的最佳方法?

我花了几天的时间来更新我的个人网站。 我的个人网站的url是(我的名字)(我的姓).com,因为我的姓氏很不寻常,而且我很幸运地拿起域名。 我的电子邮件地址是(我的名字)@(我的姓).com。 所以,真的,当它来到猜测,这不是很难。

无论如何,我想整合一个mailto:链接到我的网站,所以人们可以联系我。 而且,尽pipe我的电子邮件地址不是很难猜到,但我宁愿没有通过垃圾邮件机器人收集垃圾邮件,他们只是抓取网站的电子邮件地址模式,并将其添加到他们的数据库。

什么是我最好的方式来混淆我的电子邮件地址,最好是链接forms? 我所知道的方法是:

<a href="mailto:x@y.com">e-mail me</a> 

它的工作原理,但也意味着,一旦我的网站打到谷歌,我会涉水通过垃圾邮件作为垃圾邮件机器人轻松挑选我的电子邮件地址。

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

这是不太可取的,因为不仅游客不能点击它给我发送电子邮件,但更聪明的垃圾邮件机器人可能会检测到图像包含的字符。

我知道可能没有完美的解决scheme,但我只是想知道大家认为最好的。 我肯定愿意使用JavaScript,因为我的网站已经使用了它的吨。

我将这些字符编码为HTML实体( 如下所示 )。 它不需要JS被启用,似乎已经停止了大部分的垃圾邮件。 我想一个聪明的机器人可能还会收获,但我没有遇到任何问题。

就个人而言,我已经放弃了隐藏我的电子邮件地址。 我发现查找更好的垃圾邮件过滤解决scheme比考虑混淆更容易。 你可能花费数天的时间来寻找混淆你的地址的最佳方式,然后只需要一个人把你的地址卖给垃圾邮件发送者,而所有这些工作都是无用的。

目前接受的解决scheme是创build一个联系表格,允许用户通过电子邮件发送给您。 如果你收到了很多垃圾邮件(我没有在我的网站上),那么你可以添加一个validation码来达到一个好的效果,那么在这个时候你就会远离“低挂的成果”。

事实是,如果您提供的链接,用户可以点击以打开他们的电子邮件客户端与您的地址在收件人:字段,然后计算机能够解密的电子邮件地址从页面,所以可以垃圾邮件机器人

reCAPTCHA提供简单的电子邮件模糊处理服务 。 您不需要build立一个帐户,并可以立即开始使用它。 您可以使用该服务作为链接或popup窗口。

validation码解决后,您的电子邮件地址将显示为href / mailto,以便可以通过configuration其电子邮件客户端的用户点击/跟随其浏览器。

你提到这是你的个人网站。 在我的个人网站上(例如,bobsomers.com),我只是有一段话说:

在新网站上线之前与我联系的最好办法是给我发一封电子邮件。 我的电子邮件地址是我在这个网站的第一个名字。 如果你不能从这个提示中找出答案,那么你可能会发现电子邮件更多的是挑战,而不是找出我的地址。

人们似乎能够很好地理解这一点,因为我总是收到合法的电子邮件。 有时最好的解决scheme不需要编写任何代码。 🙂

显然使用CSS来改变你的文本的方向工作得很好。 该链接也有一些其他混淆方法的testing。

无论你使用什么都不可避免地会被打败。 您的主要目标应该是避免恼人的用户。

不要在这里使用任何混淆技术,因为这可能是电子邮件收集器将查找人们如何混淆电子邮件的第一个地方。 如果您必须在网站上显示您的电子邮件地址,请不要逐字抄袭别人的方法; 以某种独特的方式混淆它,没有其他网站已经使用,以便您的方法不会被收割机知道他们访问您的网站之前。

您可以像谷歌代码(和组)一样进行操作。 显示电子邮件的一部分,以及可点击的部分(“…”)。 点击表示您想知道电子​​邮件,并要求您填写validation码。 之后,电子邮件(和其他?)对您来说是可见的。

我维护一个网站使用一些简单的JavaScript手段(希望)保持垃圾邮件。

电子邮件链接调用一个JS函数:

函数sendEmail(name,domain){
     location.href ='mailto:'+ name +'@'+ domain;
 }

为了确保只有启用了JS的用户才能看到这个链接,用下面的语句写出来:

函数writeEmailLink(realName,name,domain){
     document.write('<a href =“javascript:sendEmail(\''
       + name +'\',\''+ domain +'\')“>');
    文件撰写(真实姓名);
    文件撰写( '</A>');
 }   

使用一个JS函数写出一个调用另一个链接意味着有两层保护。

我使用JavaScript混淆,看看这个例子:

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

混淆锚点的href的一个轻量级的方法是base64对它进行编码:

 > btoa('mailto:email@example.com') < "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t" 

然后包括它硬编码:

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

或者dynamic的服务器端,例如在PHP中:

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

结合string反转,它可能是相当垃圾邮件保存:

 <a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a> 

我其实很简单:

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

我不知道这会如何。 一旦页面加载完成,您是否可以不使用电子邮件地址,并使用AJAX调用进行加载。 不知道是否垃圾邮件机器人可以拿起更改的HTML,或者他们是否足够聪明,听其他HTTP通信尝试挑选电子邮件地址,或者他们刚刚扫描页面,因为它是第一次接收。

正如上面所说的海报,我也使用从记事网站的 JavaScript混淆。

网页生成一些可以改进的JavaScript。 mailto:文本string被机器人清除并可识别(可以识别这个string,并且可以对这个string进行不混淆处理),但是如果在jottings.com网页上input了mailto:addr@site.tld而不是addr@site.tld的电子邮件地址addr@site.tld ,然后删除文本mailto:从生成的JavaScript,突然有一些JavaScript看起来不像电子邮件有什么关系,只是随机的JavaScript,其中网站已满。 通过摆脱链接文本,我们可以进一步改善这一点 – 我用我的电子邮件地址的图像replace了我的图像,这是一个相当模糊的字体。 然后为了防止jottings.com上的这种方法变得stream行,我随机化了输出JavaScript中的variables名,使得机器人难以发现logging生成的JavaScript代码的实例。

很明显,这些改进中的一些可以被内置到logging本身的机制中,并且由于代码是公开可用的,这将是相对容易的。

一个例子可能会使这个更清晰一点。 我在上面的链接中使用了Jottings混淆器来隐藏mailto:foo@bar.com (注意我通过inputstringmailto:foo@bar.com而不是mailto:foo@bar.com来欺骗logging网站的原意)与文本“发送电子邮件”,这logging变成这个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:rJJ@VAK.GJ3" 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> 

我回来后,我把它粘贴到一个编辑器中,并:

  1. 删除mailto:
  2. 用指向我的电子邮件地址的图像replace链接文本
  3. 重命名所有的variables
  4. 用另一个链接到电子邮件地址图像replace“无脚本”部分

我结束了这个:

 <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:rJJ@VAK.GJ3" 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> 

一个人testing了九种不同的方式在一个页面上显示一个电子邮件地址,然后在他的博客上发布结果 。

他的三个最好的方法是:

  1. 使用CSS更改代码方向
  2. 使用CSS显示:无
  3. ROT13encryption

警告 – 这是两年前发布的。 垃圾邮件机器人可能变得更聪明。

另一种方法是使用JavaScript框架并将数据/模型绑定到HTML元素。 在AngularJS的情况下,HTML元素将被写为:

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

插值{{data}}绑定使用包含实际电子邮件值的范围variables。 另外,还可以使用一个filter来处理电子邮件的解码,如下所示:

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

好处在于写入HTML的方式。 缺点是它需要脚本支持,这可能是一个不错的select。

只是另一种方法。

老实说,如果你问一个mailto是否真的是你想使用的问题,你的问题可能是没有意义的。 很多使用networking邮件的人,或者在浏览器中没有正确的邮件客户端设置,都不会从mailto中受益。 您正在公开您的电子邮件地址的function,这是不会为大部分用户的工作。

你可以做的是使用一个表单在幕后发送电子邮件,这样电子邮件地址就被隐藏起来了,而且你不必担心那些不能从mailto中受益的可怜的saps。

如果你在你的网站上说“我的电子邮件地址是(我的名字)@(我的姓).com”,你的名字和姓氏都相当明显,这似乎是最好的垃圾邮件保护你会得到。

如果你使用PHP,你可以获取一个自动执行的脚本。 这就是所谓的“私人爸爸”,我们将其用于我们自己的在线audiostream媒体服务。 只需要一行代码,它可以直接使用,你可以在这里抓取它

如果有人使用Rails,他们可以使用actionview-encoded_mail_to gem。 ( https://github.com/reed/actionview-encoded_mail_to

有几个选项:

:encode – 该键将接受string“javascript”或“hex”。 传递“javascript”会dynamic创build和编码mailto链接,然后将其评估到页面的DOM中。 如果用户禁用JavaScript,此方法将不会显示页面上的链接。 通过“hex”将hex编码email_address之前输出mailto链接。

:replace_at – 当链接名称未提供时,email_address用于链接标签。 您可以使用此选项将@符号replace为给定的string来模糊email_address。

:replace_dot – 当链接名称未提供时,email_address用于链接标签。 您可以使用此选项通过replaceemail_address来混淆email_address。 在电子邮件中给出的string作为值。

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

使用JQuery,但可以很容易地移植到普通的JS如果需要的话。 将采取以下HTML块。 我提供的这个例子也是针对tel:链接。

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

并使用Javascript将其转换为适当的链接。

 $(“。obfuscate”)。each(function(){

 $(本)的.html($(本)。html的()
 .replace(“...”,“@”)。replace(/\.\.\.//,“。”)
 .replace(/ One / g,“1”)
 .replace(/ 2 / g,“2”)
 .replace(/ Three / g,“3”)
 .replace(/ Four / g,“4”)
 .replace(/ Five / g,“5”)
 .replace(/六/ g,“6”)
 .replace(/七/ g,“7”)
 .replace(/ Eight / g,“8”)
 .replace(/ Nine / g,“9”)
 .replace(/ Zero / g,“0”))

 $(this).attr(“href”,$(this).attr(“href”)
 .replace(“...”,“@”)。replace(/\.\.\.//,“。”)
 .replace(/ One / g,“1”)
 .replace(/ 2 / g,“2”)
 .replace(/ Three / g,“3”)
 .replace(/ Four / g,“4”)
 .replace(/ Five / g,“5”)
 .replace(/六/ g,“6”)
 .replace(/七/ g,“7”)
 .replace(/ Eight / g,“8”)
 .replace(/ Nine / g,“9”)
 .replace(/ Zero / g,“0”))

 })

我在这里更详细地logging它https://trajano.net/2017/01/obfuscating-mailto-links/

de / obfuscationalgorithm是相当简单的,所以它不要太写税(不需要base64parsing)

Ajax调用解决scheme

最好是在网站上有一个表格,不要显示电子邮件地址,因为所有的机器人日复一日都更加智能化,但是如果你需要在网站上显示电子邮件地址,那么你可以用你的ajax来打电话给你服务器,并单击显示它。

HTML

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

要么

 <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 => 'info@domain.ltd' )); } 

为了更安全,你可以像这样改变.one $(document).one('click', '.obfmail', function(e) {或者甚至可以使用一个PHP生成的令牌来传递数据到ajax调用,只接受一个像这样的ajax函数的调用:

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

jQuery的:

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

也可以对返回的电子邮件地址进行编码或反转。

对于电话号码也工作得很好!

我使用PHP函数来生成一些JavaScript来输出页面加载的电子邮件。 请注意,您不需要 PHP在运行时生成JS,您可以在本地生成一次JS,然后将静态JS包含在页面中。

您还可以使用下面的代码片段中的链接函数来自动混淆某些给定的HTML(其中$ processedContent是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); } 

看看这个 。

“Enkoder表单”将对您的电子邮件地址进行encryption,并将结果转换为自我评估的JavaScript,并将其从抓取networking的电子邮件收集机器人中隐藏起来,寻找暴露的地址。 您的地址将通过网页浏览器正确显示,但对于电子邮件收集机器人将无法辨认。