在网页上隐藏(混淆)一个邮箱地址

隐藏地址能挡住那些只读取页面代码的简单机器人 —— 而这类机器人占了大多数。但对那种表现得像真实浏览器一样的机器人,隐藏毫无作用。分清这两者的区别,正是这个页面的全部意义所在。

正在加载工具……

工作原理

  1. 输入邮箱地址,以及可选的链接显示文字。
  2. 选一种方法,看看它的代价是什么、能防住什么。
  3. 把代码复制进你的页面;这里的实时预览用的就是同一份代码。

为什么什么都不用上传

这个页面上的每一步操作,都由运行在你浏览器标签页里的代码完成,用的就是渲染网页的那套引擎。文件从磁盘读进标签页的内存,在那里被处理,再作为下载写回去。它不会被送到任何地方 —— 不会送给我们,也不会送给第三方。

自己动手验证

  1. 打开浏览器的开发者工具(F12),选择“网络”(Network)面板。
  2. 载入你的文件,运行这个工具。
  3. 你能看到的请求只有这些:工具自己的代码 —— 少数几个重型工具还会从公共 CDN 取它们的开源引擎 —— 外加一条发往 loreatec.jp 的小小访问记录(页面地址和标题,仅此而已)。没有一条带着你的文件。

文件不外传的证明 →

常见问题

混淆真的有用吗?

有一部分用,而且值得说清楚。一个只下载页面代码、在里面找地址的机器人,从这四种方法里都找不到任何有用的东西 —— 而大多数地址正是这样被采集走的。一个像真实浏览器一样运行的机器人,看到的和访问者看到的完全一样,所以那些基于 JavaScript 的方法挡不住它。隐藏提高的是采集的成本,而不是彻底堵死这条路。对于绝对不能泄露的地址,请改用联系表单,或者用一个可以随时弃用的地址。

为什么不直接写“info [at] example [dot] com”这种形式?

因为这种写法对谁都没用,除了垃圾邮件发送者。读屏软件会把它念成一串不知所云的东西,用手机的人没法直接点击,客户得自己手动重新输入还容易打错 —— 而任何采集机器人只要用一个简单的查找规则就能把它还原。这是唯一一种比什么都不做还糟糕的办法。

该用哪种方法?

如果只选一种,就用 HTML 实体(把每个字符都写成一段代码)。它不需要 JavaScript,依然是一个正常的可点击链接,读屏软件也能正常读出来,还能挡住简单的机器人。基于 JavaScript 的方法能把地址藏得更好,但对于关闭或屏蔽了 JavaScript 的访问者来说,地址会干脆不出现。

CSS 方法拿来做链接安全吗?

不安全。它只是在视觉上把文字倒过来显示,但存储的内容本身就是反的,所以没法做成一个能正常工作的 mailto 链接,而且在有些浏览器里,复制出来的还是那串反过来的字符。这种方法只适合用在纯文字展示的地址上。