使用 JavaScript 混淆电子邮件

Obfuscating an email using JavaScript

我知道这个问题已经被问过很多次了,普遍的共识是垃圾邮件机器人最终总会找到一种方法来收集电子邮件,所以这是一个失败的原因。但我希望新创建的电子邮件在我创建的页面上可见,并且我希望 至少有一些东西 可以保护它免受垃圾邮件机器人的侵害。这是我想使用的简单 JavaScript 技巧:

$(document).ready(function() {
  setEmailAddress("abc@xyz.com");
});

function setEmailAddress(emailValue) {
  $("#spanTest").append($("<a>").attr("href", "javascript:location='mailto:" + obfuscateString(emailValue) + "';void 0").text(obfuscateString(emailValue)));
}

function obfuscateString(plaintext) {
  var obfuscated = "";

  for (var i = 0; i < plaintext.length; i++) {
    obfuscated += "\u00" + plaintext.charCodeAt(i).toString(16);
  }

  return obfuscated;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<span id="spanTest"></span>

问题如下:

  1. 如果电子邮件 abc@xyz.com 是从数据库中提取并传递给方法 setEmailAddress 那么由于 html 首先被机器人抓取找不到邮件,我还需要在页面上混淆它吗?

  2. 你会注意到锚点的 link 文本没有被混淆。如果我也需要混淆那部分,是否可以在不使用 eval?

  3. 的情况下实现这一点

注意:我已经在使用 reCaptcha 的页面上有一个联系表单,但是这个查询是为我希望有一个电子邮件在页面上也可见。

编辑: 看完评论后,我想我需要强调第一个问题。 2 以上。请参阅上面更新的代码。

如您所见,我也在尝试 hide/obfuscate link 文本。我知道我需要 document.write 通过 obfuscateString 方法生成的结果,但不建议为此使用 eval。有没有办法混淆这部分文本?

所以我最终使用了以下内容:

$(document).ready(function() {
  setEmailAddress("abc@xyz.com");
});

function setEmailAddress(emailValue) {
  $("#spanTest").append($("<a>").attr("href", "javascript:location='mailto:" + obfuscateString(emailValue) + "';void 0").html("<img src='https://i.stack.imgur.com/CFrNW.png' />"));
}

function obfuscateString(plaintext) {
  var obfuscated = "";

  for (var i = 0; i < plaintext.length; i++) {
    obfuscated += "\u00" + plaintext.charCodeAt(i).toString(16);
  }

  return obfuscated;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="spanTest"></span>

也就是说,我更改了link文本代码中的部分。 来自:

.text(obfuscateString(emailValue))

至 这个:

.html("<img src='https://i.stack.imgur.com/CFrNW.png' />")

它将呈现(电子邮件的)图像来代替文本。仍然欢迎您提出建议。