隐私泄漏谁的锅
昨晚年度打假315再起波澜,睡觉前看到有一条热搜特别瞩目:#浏览网页就能泄露手机号
对于用户跟踪的相关WebAPI早些年产品开发还是稍有研究的,但浏览器的沙箱运行机制会使得程序无法通过api直接读取硬件信息,间接影响就是无论平台方出于统计的目的还是广告商出于投放广告目的等等,都无法精准知道当前用户是谁。那么根据央视曝光的新闻,他们是怎么做到的呢?

MAC号(手机识别码),估计他们说的是IMEI,并非MAC码。完全不同的概念,先不管,主要是想搞清楚他们怎么在黑箱里面拿到用户手机号的,这里的重点是:
浏览网页 —> 获取到手机MAC号 —> 反查手机号
第一反应是,不可能。因为就算是原生iOS/Android开发,目前要读用户设备信息,也要弹窗获取授权,否则肯定要被捶。浏览器环境就更加不可能提供默认读取的API给开发者。
广告公司以前会用cookie记录用户信息作匹配,最终通过大数据匹配算出来真实用户信息,技术实现上也未必不可能,但需要的基础数据量太大普通开发者也没办法这么做。fingerprintjs也是通过客户端浏览器作为识别用户唯一特征的技术,早前也刚好翻过下他们的技术原理,简单说就是根据用户当前设备的一些硬件算力(webGL,音频指纹等)值给出一个区间,最后用算法计算出唯一ID,在客户端存下来以后配置domain就可以达到跨浏览器识别匿名用户。
这种跨浏览器设置用户ID的用途,跟手机MAC码反推手机号,也是两码事。浏览器指纹的缺点在于会根据设备的硬件性能导致计算时间不一样,甚至出现CPU/GPU发热风扇狂转;读MAC码就是一个API同步操作,不会产生其他硬件上的性能消耗。
搜索了一下,发现很早前就有人写了相关的技术文章做原理分析,思路是这样:
手机上网 —> 运营商数据挟持http请求 —> 网页植入js请求 —> 请求通过运营商网关认证查询用户信息 —> 返回的用户信息通过js变量注入到浏览器环境 —> 网页提供api给第三方…
其实我没想到作恶的居然会是提供带宽运营商,毕竟手机卡基本都要实名。正如在森林里到处在躲各种害虫猛兽,跑到一个屋子里打算住下来发现屋主人是个人贩子,趁你不注意就打晕卖掉。
这里的关键点有两个,一个是通过手机流量上网,另外一个就是访问了非https的网页。所以防范也很简单:
- 使用Wi-Fi
- 使用vpn/代理
- 代理规则reject运营商的ip段和域名
但这里还是跟新闻说的查询MAC号没扯上关系,主要还是用户访问了非安全的http网页。现在https的普及率也越来越高,运营商挟持这么恶心的事情,早晚也会消失。是否通过MAC码/串号IMEI反推手机号已经不重要了,关键是所在地的网络运营商,他们要做恶其实是防不胜防的,唯一的办法就是打电话投诉,运营商和工信部。
从隐私角度上来说,手机号泄漏是毁灭性的,号码随着用户信息转手卖给不同商家,这事情就变成了骚扰。最常见的例子就是,搜索引擎搜索一些关键字如「机票」,进了一个网站,刚停留1分钟,就有电话打过来问是否需要购买优惠机票?或者搜索药物、病理相关的关键字,打开网页后精准喊出称呼和询问事情,不知情的会觉得很唐突吧。但科技广告公司就靠这个盈利,而且大多会再次转售或者交换数据。
时隔多年,依然会想起当年Google公司的行为准则:
don't be evil