【问题标题】:Obfuscating an email using JavaScript使用 JavaScript 混淆电子邮件
【发布时间】:2020-01-18 21:58:23
【问题描述】:

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

以下是问题:

    1234563它在页面上?
  1. 你会注意到锚的链接文本没有被混淆。如果我也需要混淆该部分,是否可以不使用eval 来实现?

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

编辑: 在阅读了 cmets 之后,我想我需要强调一下这个问题。 2 以上。请参阅上面的更新代码。

如您所见,我也在尝试隐藏/混淆链接文本。我知道我需要通过obfuscateString 方法document.write 生成的结果,但不推荐使用eval。有没有办法混淆这部分文本?

【问题讨论】:

  • 由于bot一开始抓取的html是找不到email的 当然可以,页面上是纯文本的。 mailto 很奇怪这一事实并不能阻止机器人能够看到普通文本,并且机器人可以轻松获取包含 @ 的文本,看起来可能是一封电子邮件
  • @CertainPerformance:如果纯文本是指我在代码中使用的硬编码“abc@xyz.com”,那么它是出于演示目的,电子邮件将在运行时从数据库。
  • .text(emailValue) 将电子邮件放入页面文本中,机器人将能够检测到。
  • @CertainPerformance:谢谢,我也是这么想的,所以我的问题没有。 2.
  • 这能回答你的问题吗? Effective method to hide email from spam bots

标签: javascript jquery obfuscation


【解决方案1】:

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

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

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

.text(obfuscateString(emailValue))

到 这个:

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

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

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2010-11-26
    • 2013-04-20
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多