我知道这个问题已经被问了很多次,并且一般的共识是垃圾邮件机器人最终总会找到收集电子邮件的方法,所以这是无望的。但是我想要一个新创建的电子邮件地址出现在我创建的页面上,并且我希望有至少一些方式来防止它受到垃圾邮件机器人的攻击。以下是我想使用的简单的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>
以下是问题:
如果从数据库中提取电子邮件
abc@xyz.com
并传递给方法setEmailAddress
,则由于机器人在第一次爬取的HTML中未找到电子邮件,我是否仍然需要在页面上进行混淆处理?您会注意到锚文本的链接文本没有被混淆。如果我也需要混淆该部分,则是否可以在不使用
eval
的情况下实现?
注意:我已经在页面上有一个使用reCaptcha的联系表单,但是这个查询是为了当我希望在页面上显示电子邮件时。
编辑: 阅读评论后,我认为需要强调上面的第2个问题。请参见上面更新的代码。
如您所见,我正在尝试隐藏/混淆链接文本。我理解我需要通过方法obfuscateString
生成的结果进行document.write
,但是使用eval
不推荐。 有没有办法混淆这段文字呢?
mailto
看起来很奇怪,这也不能阻止机器人能够查看普通文本,并且机器人可以轻松地收集包含类似电子邮件的@
符号的文本。 - CertainPerformance.text(emailValue)
将电子邮件放入页面文本中,机器人将能够检测到。 - CertainPerformance