使用 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. 您会注意到锚点的链接文本没有经过模糊处理。如果我也需要混淆该部分,是否可以在不使用eval的情况下实现?

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

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

如您所见,我也在尝试隐藏/混淆链接文本。我知道我需要通过该方法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>

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

.text(obfuscateString(emailValue))

自 这:

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

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

最新更新