我正在使用JavaScript函数erot13。正如某些文章所建议的那样,此功能假设是对电子邮件进行混淆处理,因此电子邮件收集机器人无法从网站中提取它。
function erot13(s) {
return (s ? s : this).split("").map(function (_) {
if (!_.match(/[A-za-z]/)) return _;
var c = Math.floor(_.charCodeAt(0) / 97);
var k = (_.toLowerCase().charCodeAt(0) - 83) % 26 || 26;
return String.fromCharCode(k + ((c == 0) ? 64 : 96));
}).join("");
}
function erot13_onload(event) {
var elements = window.document.querySelectorAll("a[data-erot13]");
for (var j = 0; j < elements.length; j++) {
var element = elements[j];
var email = element.dataset.erot13;
var overwrite = element.dataset.erot13Overwrite !== undefined;
if (email !== undefined) {
element.href = "mailto:" + erot13(email);
if (overwrite) {
element.innerHTML = erot13(email);
}
}
}
}
window.addEventListener("load", erot13_onload);
逐步执行过程的过程如下:
<script src="erot13.js"></script>
我去这个网站获取我的电子邮件的加密版本:https://rot13.com/
最后,我将标签添加到具有data-erot13属性的index.html中,在其中放置加密的电子邮件:
<a data-erot13="[email protected]"><span class="email"></span>Email Me</a>
[所有内容都可以正常工作,但是如果我在浏览器中检查电子邮件,则会看到真实的电子邮件,但看不到它的加密版本。这是否意味着erot13函数不起作用?如何确定该僵尸程序是否真的加密了?
据我所知,您的方法rot13
运行正常。但是,通过修改函数element.href
中的element.innerHTML
和erot13_onload
变量,可以更改DOM。
因此,在您的页面上执行任何JavaScript之前,HTML元素将包含编码的电子邮件地址。当执行load
时,您的erot13_onload
功能将用真实的电子邮件地址替换编码的电子邮件地址。
除非机器人可以执行JavaScript或检测编码后的电子邮件,否则它将无法看到真实的电子邮件地址。然后它将看到与您相同的输出(已解码的电子邮件地址)。