网页抓取 加密html(加密和混淆的反垃圾邮件手段,你知道吗?)
优采云 发布时间: 2022-03-21 23:48网页抓取 加密html(加密和混淆的反垃圾邮件手段,你知道吗?)
提醒:此页面将不再更新、维护或支持。文章 中描述的内容和评论是时间敏感的。不保证在技术细节或软件使用方面完全有效和可操作。请仔细参考!
邮箱里一直有很多垃圾邮件,这让我不得不重新检查网上发布的电子邮件地址。为了避免垃圾邮件,我特意把@换成了#,也许十年前这是个好主意,但是随着神经网络和机器学习新算法的发展,这种小方法也面临着失败的风险,因为大部分都是通过修改邮件地址的“@”符号,通过正则表达式过滤匹配特征值来完成的,比如,,这样的疑似邮件地址的特征还是可以抓到邮件地址的,所以我们需要在将电子邮件发布到 HTML 页面之前对其进行加密和混淆处理。
我举个例子来介绍几种反垃圾邮件的加密和混淆方法。
1. 生成图片
使用传统的图灵测试验证码会阻止采集的邮件地址生成图片,并利用机器无法识别的特征来区分人和机器。生成图片的方法有很多,除了高大上的Photoshop,甚至可以使用系统自带的绘图工具来完成。此外,如果你想偷懒,有一些在线工具可以帮助你,例如“将你的电子邮件地址变成图像的 10 大网站”。
当然,生成图片也不是万无一失的。有理由相信,既然基于图片的验证码可以被机器识别和破解,那么基于相同技术的邮件地址必然是不可避免的,尤其是随着OCR技术的逐渐发展和成熟,采集程序可以对整个网页进行OCR,最后提取出需要的内容,所以我们还需要将图片生成的email地址与噪声、干扰线等混淆,具体方法请参考相关内容防止验证码被识别。
但是经过这样的设计,我们的邮箱地址对真正需要的人变得不那么友好了,人们获取准确的邮箱地址也变得更加困难。
2、替换键符号
我们知道很多爬虫都是通过@特征符号来爬取邮件地址的。正如我在文章开头提到的,用其他东西替换这个符号将大大降低我们的电子邮件地址被爬取的概率。当然,这样做的缺点是除非你给用户一个提示,否则你需要指定这是一个电子邮件地址,例如 john# 或 john{a} 等。当然智能电子邮件捕获软件可以自动对这些招数免疫,通过判断域名也可以得到。这是一个电子邮件地址,因此将@替换为一个非常特殊的符号也是一种生存方式。对于这种替换方式,更糟糕的是把email地址变成一个句子,比如john AT example DOT com,这样看起来更安全,
3、使用 JavaScript
JavaScript简称JS,通常作为嵌入网页的小脚本,为其提供更丰富的交互和应用。我们使用JS来混淆我们的邮箱地址,最后使用document.write或者innerHTML来输出。优点是大多数爬虫无法在网页中执行脚本。它们只擅长抓取静态文本,因此无需担心将电子邮件地址泄露给爬虫。另外,对于终端用户来说,通过浏览器的解读,显示给他们的是一个完整的邮箱地址,用户体验很好,但是这种方式有一个比较致命的弱点:如果用户的浏览器不支持脚本,邮箱地址会不能正常显示,尽管这种情况很少见。
一个典型的例子如下。当然还有很多变种实现,比如PHP hide_email,这里就不介绍了。
var username = "john";
var hostname = "example.com";
document.write(username + "@" + hostname);
特别值得一提的是ROT13算法的应用。ROT13 是 13 位循环。归根结底是将字母表的第一部分连接成一个环,将要编码的字母映射为旋转后的13位字母,如下*敏*感*词*所示:
对于PHP来说,有一个函数str_rot13可以直接使用,然后根据其算法反演得到加密前的文本。一般使用以下JS代码:
document.write("Fraq n zrffntr".replace(/[a-zA-Z]/g,
function(c){return String.fromCharCode((c=(c=c.charCodeAt(0)+13)?c:c-26);}));
上面的代码将解码为以下 HTML:
Send a message
4、使用 HTML 和 CSS 混淆
当然,除了 JavaScript,我们还可以使用 HTML 或 CSS 的一些技巧来混淆 HTML 注释。在 HTML 中,收录注释,浏览器不会将注释呈现给最终用户。那么我们就可以充分利用这个一点点,让我们的邮箱地址看起来像这样:
john@example.com
这不会被浏览器显示出来,但足以迷惑机器爬虫的爬取。
同样的 CSS display:none 组合,我们仍然可以得到以下混淆类似的意思:
jo@hn@@exam@ple.com
同样的CSS display:none 必须注定收录的文本不会被显示,所以最终显示的也是完整的电子邮件地址。
对于CSS,还有一种方法可以让我们避免爬取,那就是利用CSS文本显示顺序的特性,比如下面这样:
moc.noitpecni@kcik
CSS代码如下:
.obfuscate { unicode-bidi: bidi-override; direction: rtl; }
首先,文字被我们颠倒过来。如果我们想恢复它,我们可以不使用JS,通过CSS再次反转,从而得到正确的文本。当然,这个方法我试过之后还是有一点不足,就是用户选择复制邮箱地址的时候,地址还是倒序的。
综上所述,在打击垃圾爬虫采集的方法上,充分发挥了网友们的聪明才智,涌现出各种有才华的实现方式。限于篇幅,我就不一一介绍了。其实没有绝对的安全,最安全的解决办法就是没有邮箱,我怎么能这么说呢?也就是使用联系表格(Contact From)让需要联系你的人通过表格直接给你发邮件,从而避免了邮件地址的泄露。还有很多在线联系表单的开源代码,我的博客最后考虑了。也是这样,现在大家可以找到这个链接,通过右上角的“关于我”给我留言。
参考