使用字体保护网页敏感信息
在一次找(爬)数据的过程中,想批量处理一些业务数据,发现了这个巧妙的敏感信息隐藏思路。
如下图所示,手机号直接明文暴露出来了,但是当你想复制出来时发现复制了一堆的方块,是11个特殊字符
(省略后续位数)。
F12定位元素也是能看到都是小方块,但是又没有看到有请求去后端拉取数据,这就有点意思了。
如果恰好有用专业的IDE或者复制到Terminal,就会发现是一串不常见的unicode串编码。那么怎么获取这份明文数据呢。
隐藏实现思路:
- 对应业务的网页直接做静态化,不通过后端请求敏感信息(其实这个设计是最不安全的,虽然成本低)。
- 展示的值是特殊字体(例如 LeeTreeshadow)渲染后的值,而不是普通的字符串,即无法直接通过复制粘贴,读取网页HTML得到真实值
- 字体文件还能再通过js用base64加载进来,规避F12直接看到字体ttf文件
- 每个网页使用不同的unicode和数字映射规则,加大数据字典构造复杂度
- 再对整体静态结果资源进行混淆
爬虫解密思路
- 得到字体实际unicode字符串值
- 数据字典构造
- 人工去寻找unicode值和肉眼看到的数字组成数据字典(才10个数字),但是遇到多规则就无法人工完成了
- 终极:通过unicode值的规律来推算出数据字典,一个正经的字体文件 定义 unicode时 0-9 是有序递增的,而国内手机号都是1开头,所以。。。