如何在网页上隐藏你的Email邮件地址

简介: 你有一个网站,你想把email地址放在上面,让别人可以很方便地联系你,但是你又担心一旦公开邮箱地址,垃圾邮件可能会像洪水一样涌来。你 的担心是对的。现在网上抓取邮件地址的蜘蛛爬虫仅仅通过一条简单的正则表达式,就可以轻易地获取到你的邮件。但是你可能通过一些简单的CSS和 JavaScript来欺骗一些不太聪明的爬虫。(注* 网络爬虫确实已经充斥了互联网,参见:人类只占到互联网流量的40%不到)

作者:Amit Agarwal 翻译:newghost

你有一个网站,你想把email地址放在上面,让别人可以很方便地联系你,但是你又担心一旦公开邮箱地址,垃圾邮件可能会像洪水一样涌来。


你 的担心是对的。现在网上抓取邮件地址的蜘蛛爬虫仅仅通过一条简单的正则表达式,就可以轻易地获取到你的邮件。但是你可能通过一些简单的CSS和 JavaScript来欺骗一些不太聪明的爬虫。(注* 网络爬虫确实已经充斥了互联网,参见:人类只占到互联网流量的40%不到


1. 通过CSS隐藏邮件地址

1a. 使用CSS伪类(pseudo-classes)

你可以使用CSS中的::before 和 ::after伪元素插入email的用户名和@另一边的域名。网络蜘蛛,一般是看不到CSS的,直到浏览器渲染前,他都只能看到一个@符号。在这个例子里,我们将隐藏 john@gmail.com

<style>

 my-email::after {

   content: attr(data-domain);

 }

 my-email::before {

   content: attr(data-user);

 }

</style>

<!--通过 data-user 和 data-domain 设置email的用户名和域名-->  

<my-emaildata-user="john"data-domain="gmail.com">@</my-email>

更新:这是@orlie建议的另一个版本,这个对爬虫来说更加的晦涩,因为它将@也隐藏起来了。

<style>

 my-email::after {

   content: attr(data-domain);

 }

 my-email::before {

   content: attr(data-user) "\0040";

 }

</style>

<!--通过 data-user 和 data-domain 设置email的用户名和域名-->

<my-emaildata-user="john"data-domain="gmail.com"></my-email>

上面的解决方案有一个缺陷,用户无法在你的网页上选择和复制你email地址,他们只能手动地写下来。

如果想让这个用户体验变得好一点,即允许用户选择到这些伪元素,你也可以用下面这种方式,仅"@"是不可选择的:

<style>

 .domain::before {

   content: "\0040";    /* Unicode character for @ symbol */

 }

</style>

john<spanclass="domain">abc.com</span>


1b. 倒序输出

你可以倒序输出你的email地址(john@abc.com as moc.cba@nhoj)然后通过unicode-bidi和direction CSS属性让浏览器倒序输出文字。这些文字是可选择的,但是复制出来是倒序的。

<style>

 .reverse {

   unicode-bidi: bidi-override;

   direction: rtl;

 }

</style>

<spanclass="reverse">moc.cba@nhoj</span>


1c. 关闭显示(display)

你可以在你的邮件地址里输出一些多余的字符,然后使用display属性隐藏这些字符,来显示真实的邮件地址。

<style>

 #dummy {

   display: none;

 }

</style>

<!-- 你可以添加任意数量的z标签 -->

john<spanid="dummy">REMOVE</span>@abc<spanid="dummy">REMOVE</span>.com

2. 通过JavaScript混淆电子邮件

2a. 使用'onclick'事件

你然后可以在mailto的链接中输出你的邮件地址,你仅需要替换到一些字提示符:像'.'和'@'字符可以使用文字代替。然后添加一个onclick事件将这些特殊转换过来。

<ahref = "mailto:johnATgmailDOTcom"

  onclick = "this.href=this.href

             .replace(/AT/,'&#64;')

             .replace(/DOT/,'&#46;')"

>联系我</a>


2b. 乱序数组

将你的邮件地址分割成多个部分的数组,然后使用JavaScript输出正确的顺序再使用.innerHTML属性添加到网页上。

<span id="email"></span>

〈script〉

 var parts = ["john", "abc", "com", "&#46;", "&#64;"];

 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];

 document.getElementById("email").innerHTML=email;

〈/script〉

3. WordPress + PHP

如果你使用的是WordPress,你也可以考虑使用内置的反爬虫插件来编码(加密)你的邮件地址。这个插件会将字符转换成HTML格式的编码(如字母a变成a 而且符号 @ 会变成@)这些字符都是可以在网页上直接显示的。

<?phpecho antispambot("john@abc.com"); ?>

你也可以在浏览上编码。

最后,如果你真的不希望网络爬虫看到你的邮件地址,不要将它放到网页上,你可以试一试Google的reCAPTCHA服务。它会将你的邮件隐藏在验证码(CAPTCHA)后面,人们只有输入正确的验证码才可以看到邮件地址。

相关文章
|
Java 数据安全/隐私保护 Android开发
如何查看签名后的jks文件信息(查看应用签名)
如何查看签名后的jks文件信息(查看应用签名)
4711 0
如何查看签名后的jks文件信息(查看应用签名)
|
Java API PHP
(转载)为什么不推荐使用swoole和hyperf官方框架
(转载)为什么不推荐使用swoole和hyperf官方框架
5328 0
|
3月前
|
机器学习/深度学习 负载均衡 算法
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
279 7
|
8月前
|
人工智能 IDE 开发工具
JetBrains PyCharm 2025.1 发布 - 面向专业开发者的 Python IDE
JetBrains PyCharm 2025.1 (macOS, Linux, Windows) - 面向专业开发者的 Python IDE
882 29
JetBrains PyCharm 2025.1 发布 - 面向专业开发者的 Python IDE
|
6月前
|
前端开发 JavaScript 开发者
2025 最新 100 道 CSS 面试题及答案解析续篇
本文整理了100道CSS面试题及其答案,涵盖CSS基础与进阶知识。内容包括CSS引入方式、盒模型、选择器优先级等核心知识点,并通过按钮、卡片、导航栏等组件封装实例,讲解单一职责原则、样式隔离、响应式设计等最佳实践。适合前端开发者巩固基础、备战面试或提升组件化开发能力。资源地址:[点击下载](https://pan.quark.cn/s/50438c9ee7c0)。
146 5
2025 最新 100 道 CSS 面试题及答案解析续篇
|
Ubuntu PHP 开发者
如何在Ubuntu中切换多个PHP版本
通过上述步骤,您不仅能够高效地在Ubuntu系统中安装和切换PHP版本,还能根据项目需求灵活配置,大大提升开发效率与灵活性。更多关于服务器配置与优化的信息,获取全面的技术支持与解决方案。
371 1
|
JavaScript 数据安全/隐私保护
Vue中如何使用过滤器来隐藏手机号、邮箱等字符串的中间部分内容
这篇文章介绍了在Vue中如何使用过滤器来隐藏手机号和邮箱等字符串的中间部分内容,以提高隐私保护。文章展示了实现效果,并提供了实现过程的代码示例,包括HTML部分的绑定、data部分的数据定义和script部分的过滤器定义。文章还解释了过滤器的概念、语法和使用方式,并提供了一个外部链接供读者获取更加详细的过滤器知识。
|
机器学习/深度学习 数据可视化 计算机视觉
可视化VIT中的注意力
ViT中最主要的就是注意力机制,所以可视化注意力就成为了解ViT的重要步骤,所以我们这里介绍如何可视化ViT中的注意力
1150 0
|
监控 Java 网络安全
java获取ssh连接时报错com.jcraft.jsch.JSchException: Packet corrupt如何处理?
【6月更文挑战第5天】java获取ssh连接时报错com.jcraft.jsch.JSchException: Packet corrupt如何处理?
2577 5
|
JavaScript 网络协议 API
Node.js中的WebSockets:实现实时通信的利器
【4月更文挑战第30天】本文介绍了如何在Node.js中利用WebSockets实现实时通信。WebSockets是全双工的网络协议,提供低延迟、高效率的通信,适合实时应用。在Node.js中,可使用`ws`库创建WebSocket服务器和客户端。通过监听`connection`、`message`等事件,实现双向通信。示例展示了服务器端和客户端的基本设置,为构建实时通信应用奠定了基础。