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

Ada*_*ich 130 html javascript email obfuscation

过去几天我一直在努力更新我的个人网站.我的个人网站的URL是(我的名字).(我的姓).com,因为我的姓氏很不寻常,我很幸运能够拿起域名.我的电子邮件地址是(我的名字)@(我的姓).com.所以真的,当它归结为猜测时,它并不是很难.

无论如何,我想将mailto:链接集成到我的网站,以便人们可以联系我.而且,尽管我的电子邮件地址不是很难猜测,但我宁愿不让垃圾邮件机器人收集它,只是抓取网站的电子邮件地址模式并将它们添加到他们的数据库中.

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

<a href="mailto:x@y.com">e-mail me</a>
Run Code Online (Sandbox Code Playgroud)

它有效,但这也意味着,一旦我的网站访问谷歌,我将趟垃圾邮件,因为垃圾邮件机器人很容易选择我的电子邮件地址.

<img src="images/e-mail.png" />
Run Code Online (Sandbox Code Playgroud)

这是不太理想的,因为访客不仅无法点击它向我发送电子邮件,而且更聪明的垃圾邮件机器人可能能够检测到图像包含的字符.

我知道可能没有完美的解决方案,但我只是想知道每个人都认为最好的.我绝对愿意在必要时使用JavaScript,因为我的网站已经使用了大量的JavaScript.

chr*_*der 99

我将字符编码为HTML实体(类似这样).它不需要启用JS,似乎已经停止了大部分垃圾邮件.我想智能机器人可能仍会收获它,但我没有遇到任何问题.

  • 根据[2008年的实证研究](http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/),URL编码是下一个 - 至少有效.只有纯文本更糟糕. (39认同)
  • 我知道这已经很晚了,但值得指出的是,这里的建议是使用与URL编码不同的HTML实体.根据该研究,使用@和句点的实体是第二种最有效的方法(最有效的方法是首先绑定的三种方法,所有方法都产生0个垃圾邮件).看看这是否在将近6年之后仍然存在将会很有趣. (14认同)
  • 我觉得具有讽刺意味的是,为了保护您的电子邮件,您必须在链接到的网站上以随机,阴暗的形式输入.蜜罐,有人吗?:) (11认同)
  • 这样可以阻止最简单的spambot收集(正则表达式查找任何类似的文本和电子邮件地址),并且没有任何缺点:对于最终用户来说,它与explict href = mailto:xxx @yy链接一样方便. (6认同)
  • 这非常有效,因为许多(大多数?)爬行器/收割机非常愚蠢. (5认同)
  • 这个答案在2019年仍然有用吗?这种混淆方法是一种好方法吗? (2认同)

Cha*_*rch 82

就个人而言,我已经放弃了隐藏我的电子邮件地址.我发现更容易研究更好的垃圾邮件过滤解决方案而不是担心混淆.您可能需要花费数天的时间来寻找混淆地址的最佳方法,然后只需要一个人将您的地址卖给垃圾邮件发送者,所有这些工作都是无用的.

  • @Brad根据我的经验,情况并非如此.我为我的域名使用Google托管邮件,我的电子邮件地址非常容易找到.自从14个多月前开始使用它以来,我有0个假阴性和1个误报.我每天在垃圾邮件文件夹中收到数百个垃圾邮件. (8认同)
  • 呃,我应该补充一点:垃圾邮件不是一个会吃掉你孩子的蠢货.获取奇怪的垃圾邮件并不是世界末日.点击"举报垃圾邮件"然后继续. (7认同)

Jos*_*dan 68

当前接受的解决方案是创建一个允许用户通过电子邮件发送给您的联系表单.如果你从那里收到大量的垃圾邮件(我不在我的网站上),那么你可以添加一个优秀的验证码,那时你将远离"低悬的果实".

事实是,如果您提供一个用户可以点击的链接,用To:字段中的地址弹出他们的电子邮件客户端,那么计算机就可以从页面中解密电子邮件地址,因此可以垃圾邮件机器人.

  • 我总是喜欢它,当有一个选项来抄送你的消息.困扰我关于联系表单的一件事是它在我自己的电子邮件系统中没有留下任何记录.(虽然CC表示任何电子邮件地址都可以创建自己的一组问题.) (14认同)
  • 虽然这是一个很好的解决方案,但从技术上讲,它是一个向许多用户提供服务的解决方案.只是在说'. (8认同)
  • 也没有迹象表明电子邮件表格确实有效.我见过太多被悄悄打破的人.真实的电子邮件至少会反弹. (6认同)
  • 也就是说,发送电子邮件的逻辑应该用隐藏的服务器端代码编写,以便地址永远不会公开. (2认同)

Bob*_*ers 43

您提到这是针对您的个人网站的.在我的个人网站上(例如,bobsomers.com)我只有一段说明:

在新网站启动之前与我联系的最佳方式是向我发送电子邮件.我的电子邮件地址是我在这个网站上的名字.如果你无法从这个提示中弄清楚,那么,你可能会发现电子邮件比查明我的地址更具挑战性.

人们似乎能够很好地解决这个问题,因为我一直都会收到合法的电子邮件.有时最好的解决方案不需要编写任何代码.:)

  • 这种方法还可以过滤智商低于一定水平的人:D (3认同)

Ric*_*aca 36

reCAPTCHA提供简单的电子邮件混淆服务.您无需设置帐户即可立即开始使用.您可以将该服务用作链接或弹出窗口.

验证码解决后,您的电子邮件地址显示为href/mailto,以便配置其电子邮件客户端以使用其浏览器的用户可以单击/按下该电子邮件地址.

  • 我不认为大多数网络用户会去解决验证码只是为了给某人发电子邮件. (9认同)
  • 我和Andy在一起.CAPTCHA是一种痛苦,而reCAPTCHA比平均疼痛更大,因为它们往往难以阅读.如果通过电子邮件发送给您的人是转换点(例如,允许客户查询服务,订购或询问报价),您真的希望尽可能地让他们这样做. (7认同)
  • 该服务不再存在. (6认同)

Fab*_*oni 15

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

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"
Run Code Online (Sandbox Code Playgroud)

然后包括硬编码:

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

或动态服务器端,例如PHP:

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

与字符串还原相结合,它可能是相当垃圾邮件保存:

<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>
Run Code Online (Sandbox Code Playgroud)


Bri*_*per 14

显然使用CSS来改变文本的方向非常有效.该链接还测试了一堆其他混淆方法.

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

  • 当地址被复制粘贴时,它将向后显示.如果您希望用户尽可能轻松地与您联系,这可能会让用户反感. (6认同)
  • 这可能会复制和粘贴吗?IIRC (3认同)

Sam*_*ler 12

不要在这里使用任何混淆技术,因为它可能是电子邮件收集者首先查找人们如何混淆电子邮件的第一个地方.如果您必须在网站上显示您的电子邮件地址,请不要只是逐字复制其他人的方法; 以某种独特的方式模糊它,没有其他网站使用过,以便收割者在访问您的网站之前不会知道您的方法.

  • 多么递归. (6认同)
  • 目前这个页面是谷歌为[混淆电子邮件地址]返回的第28个结果,虽然我预计它最终会升高. (2认同)

Ros*_*oss 8

你可以像谷歌那样在谷歌代码(和群组)上做.显示电子邮件的标准和可点击的部分("...").单击表示您想要知道该电子邮件,并要求您填写验证码.之后,您可以看到电子邮件(以及其他人?).


kei*_*ics 8

我的其实很简单:

<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>');
    });
Run Code Online (Sandbox Code Playgroud)

  • 拥有hello@gmail.com的穷人:) (8认同)
  • Gmail上没有5个字符的电子邮件. (2认同)

Cod*_*ain 6

我使用JavaScript混淆,例如看一下这个:

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

  • -1:你看过它生成的代码了吗?如果您将其包含在"链接文本"中,它实际上并不会混淆您的电子邮件地址,并且与"mailto:"不同.更糟糕的是,这是一个需要Javascript的解决方案,不应该依赖Javascript作为基本内容. (2认同)

Ste*_*art 6

我维护的一个网站使用了一种有点简单的JavaScript方式(希望)保持垃圾邮件.

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

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

要确保只有启用了JS的用户才能看到该链接,请使用以下命令将其写出:

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

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


小智 5

正如上面的海报所说,我还使用了来自jottings 网站的JavaScript 混淆。

该网页会生成一些可以改进的 JavaScript。该mailto:文本字符串是明确的,并通过机器人识别(可发现这一点,并unobfuscate这个字符串),但如果进入jottings.com网页形式的电子邮件地址mailto:addr@site.tld,而不是addr@site.tld,然后删除文本mailto:从生成的 JavaScript 中,突然有一些 JavaScript 看起来似乎与电子邮件根本没有任何关系 - 只是网络中充满的随机 JavaScript。可以通过删除链接文本来进一步改进这一点 - 我用我的电子邮件地址的图像替换了我的图像,该图像采用了一种相当晦涩的字体。然后,以防万一 jottings.com 上的这种方法变得流行,我将输出 JavaScript 中的变量名称随机化,以使机器人难以发现 jottings.com 生成的 JavaScript 代码实例。

显然,其中一些改进可以内置到记事本身的机制中,并且由于代码是公开可用的,因此这将相对容易。

一个例子可能会使这更清楚一点。我在上面的链接中使用了 Jottings Obfuscator 来模糊mailto:foo@bar.com(注意,我通过输入字符串mailto:foo@bar.com而不是 来欺骗 jottings 网站的原始意图foo@bar.com)和文本“Send Me Email”,其中的 jottings 变成了这个 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>
Run Code Online (Sandbox Code Playgroud)

找回后,我将其粘贴到编辑器中,然后:

  1. 去除那个 mailto:
  2. 用指向我的电子邮件地址图像的指针替换链接文本
  3. 重命名所有变量
  4. 用另一个指向电子邮件地址图像的链接替换“noscript”部分

我最终得到了这个:

<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>
Run Code Online (Sandbox Code Playgroud)