使用JavaScript对电子邮件进行混淆

3

我知道这个问题已经被问了很多次,并且一般的共识是垃圾邮件机器人最终总会找到收集电子邮件的方法,所以这是无望的。但是我想要一个新创建的电子邮件地址出现在我创建的页面上,并且我希望有至少一些方式来防止它受到垃圾邮件机器人的攻击。以下是我想使用的简单的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. 您会注意到锚文本的链接文本没有被混淆。如果我也需要混淆该部分,则是否可以在不使用eval的情况下实现?

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

编辑: 阅读评论后,我认为需要强调上面的第2个问题。请参见上面更新的代码。

如您所见,我正在尝试隐藏/混淆链接文本。我理解我需要通过方法obfuscateString生成的结果进行document.write,但是使用eval不推荐。 有没有办法混淆这段文字呢?


1
由于机器人首先爬取的HTML找不到电子邮件地址,但它确实可以在页面上的纯文本中找到。事实上,即使mailto看起来很奇怪,这也不能阻止机器人能够查看普通文本,并且机器人可以轻松地收集包含类似电子邮件的@符号的文本。 - CertainPerformance
@CertainPerformance:如果您所说的纯文本是指我在代码中使用的硬编码“abc@xyz.com”,那么那只是为了演示目的,电子邮件将在运行时从数据库中获取。 - Abdullah
1
.text(emailValue) 将电子邮件放入页面文本中,机器人将能够检测到。 - CertainPerformance
这回答解决了你的问题吗?有效方法来隐藏电子邮件不被垃圾邮件机器人发现 - Andreas Furster
@AndreasFurster:这是一个很好的发现。它收集了不同的方法来隐藏/混淆电子邮件,但正如你所看到的,排名最高的答案使用了我使用的相同技术(JS)(除了我使用Unicode)。我更多地是在尝试找到第二个问题的解决方案。我想我需要编辑我的帖子。 - Abdullah
显示剩余2条评论
1个回答

0

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

$(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://istack.dev59.com/CFrNW.webp' />"));
}

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>

也就是说,我修改了代码中链接文本的部分。 从这个:

.text(obfuscateString(emailValue))

变成这样:

.html("<img src='https://istack.dev59.com/CFrNW.webp' />")

它将在文本位置呈现一张图片(邮件的图片)。您的建议仍然受欢迎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接