保护电子邮件地址免受垃圾邮件机器人/网络爬虫的侵害

问题描述 投票:0回答:6

如何防止电子邮件蜘蛛从网页收集电子邮件?

mailto:
将它们链接起来是否会增加它们被拾取的可能性? URL 编码有用吗?

显然,最好的对策是只向登录用户显示电子邮件地址,或者提供联系表单而不是电子邮件地址。但就纯粹的客户端解决方案而言,有什么可用的呢?

web-crawler spam spam-prevention email-spam
6个回答
9
投票

大多数电子邮件蜘蛛没有 javascript 解释器,因此,如果您确实需要

mailto:
,您可以使用 javascript 注入它...只需确保地址以某种方式在 javascript 中被隐藏,例如

myLink.href='mai'+'lto:'+'bob'
           +'@'
           +'example.com';

如果您需要在页面上显示电子邮件地址,一个常见的解决方案是使用 php 的 gd 之类的东西生成图像(尽管 javascript 注入也应该可以正常工作)。

这个想法是从 HTML 中删除电子邮件地址并用 JavaScript 注入它们。这样,电子邮件地址就不会以其原始形式出现在任何 HTTP 流量中,而这正是蜘蛛正在查看的内容。


5
投票

几年后,我为另一个网站创建了以下 jQuery:

$(".email").each(function() {
    $(this).html( $(this).html().replace("...", "@").replace(/\.\.\./g, ".") );
    $(this).attr( "href", $(this).attr("href").replace("...", "@").replace(/\.\.\./g, ".") );
});

电子邮件则写为:

<a href="mailto:bob.smith...example...com" class="email">bob.smith...example...com</a>

它并不完美,但它非常简单,并且似乎可以阻止大多数电子邮件收集器。这种方法的优点是,不使用 JavaScript 的人可能能够算出实际的电子邮件地址是什么。


查看此有关各种电子邮件混淆方法的研究


4
投票

我倾向于避免使用

mailto
,因为它让人们很容易获取电子邮件地址。

如果您要在网站上有联系页面,则只需一个表单,然后他们提交您的服务器端代码并使用适当的电子邮件地址。

如果您需要获得其他人的地址,请使用数字、姓名、用户名以及某种方式来识别他们。

如果您在某个范围内只有一个电子邮件地址,即使您尝试隐藏它,它也可能会被获取,因为这些程序可能非常复杂,因为它们的目的就是查找电子邮件地址。

与大多数秘密一样,如果您不希望其他人获得它们,请不要将它们放在页面上。


1
投票

我通常将它们分成单独的部分,然后使用 JavaScript 重新组合它们。最后的 javascript 执行 document.write 来写出 html。

var mail = "mailto";
var namepart = "test.user";
var domainpart = "example";
var tld = "com"; 
var address = namepart + "@" + domainpart + "." + tld;
document.write("<a href=" + mail + ":" + address + '">' + address + "</a>";

0
投票

如果您不需要邮件链接,可以将 @ 符号替换为 [at]

示例:sam [at] example.com


0
投票

正如Scott的回答所提到的,链接可以在页面加载后直接由JavaScript创建。对于用户来说,链接看起来就像是 HTML 文档的一部分。

作为替代方法,您可以对电子邮件地址执行 Base64 编码,以使该地址的每个部分对于纯 HTML 爬网程序不可见。

请记住,Google 将在抓取时执行此 JavaScript 代码(在无头 Chromium 实例中),并且能够在搜索结果中显示电子邮件地址(取决于搜索查询)。

<!doctype html>
<html>
    <head>
        <script type="text/javascript">
            onload = function(){
                var address = atob("dXNlckBkb21haW4uY29t");
                var anchor = document.createElement("a");
                anchor.innerHTML = address;
                anchor.href = "mailto:" + address;
                document.body.appendChild(anchor);
            };
        </script>
    </head>
    <body>
        <!-- Email link added here as the last element at runtime-->
    </body>
</html>

因此我推荐另一种选择:将电子邮件地址放入 SVG 文件中,并确保 SVG 编辑器将字符转换为单独的路径。这样,即使在高密度显示器上,它对用户来说也会显得清晰。然而,用户无法点击或复制粘贴它,因此它最适合简单的电子邮件地址。

© www.soinside.com 2019 - 2024. All rights reserved.