网页上 mailto 的防爬虫加密

也就是防止爬虫爬到形如 mailto:john.doe@example.com 的邮件地址来发骚扰邮件,而同时又想在网页上保留 mailto 链接。

编程
JavaScript
HTML
作者

kymot

发布于

2023-03-12 18:32:57 +08:00

修改于

2023-03-12 19:22:35 +08:00

前言

也就是防止爬虫爬到形如 mailto:john.doe@example.com 的邮件地址来发骚扰邮件,而同时又想在网页上保留 mailto 链接。

最早看到这种的是在马普所的网站的个人页面(比如这个),只是我当时查了一会也搞不懂它的原理,当然现在试了试也没搞懂。

但只是要加密一下链接,方法当然不止这个。简单(即符合直觉)一点的方法自然是利用 JavaScript。

实现

我搜索到 jumk.de 上一种可能的实现,是一种简单的凯撒密码。我寻思自己用不到这个……我只需要避免明文的邮件地址出现。所以我参考 MDN 的 base64 页面,这么做:

location.href=decodeURIComponent(escape(window.atob(something_base64)));

其中放上事先以 base64 编码好的 mailto:{邮箱地址},然后包装成 JS 匿名函数放在 <a>href 里。大概如

<a href="javascript:(function(){
         location.href=decodeURIComponent(
         escape(
         window.atob('bWFpbHRvOmpvaG4uZG9lQGV4YW1wbGUuY29t')));})()">
    john.doe@example.com
</a>

效果是这样的:john.doe@example.com

当然这样的方式如果足够流行(我并没有做广泛的调查)还是可能被爬的,那我也服气。反正目前这对我就够用了。

还有是用伪元素代替 @ . 这种分隔符,在保证显示效果的同时防止写上明文。这太简单,就不说了。

效果在此处可以看到。