如何通过图标来识别网站用户指纹
字数 1215 2025-08-15 21:33:46
通过Favicon实现网站用户指纹识别技术详解
背景知识
Favicon基础
Favicon(网站图标)是现代浏览器提供的一种用户体验增强功能:
- 尺寸通常为16×16或32×32像素
- 显示在地址栏和书签列表中的页面名称旁边
- 通过HTML中的
<link>标签引入:<link rel="icon" href="/favicon.ico" type="image/x-icon">
Favicon缓存机制
浏览器对Favicon的处理有以下特点:
- F-Cache:浏览器将favicon缓存在一个单独的本地数据库中
- 缓存项包含:访问的URL(子域、域、路由、URL参数)、favicon ID和生存时间(TTL)
- 加载流程:
- 浏览器首先检查本地F-Cache中是否有活动网站URL的条目
- 如果存在,从缓存加载图标
- 如果不存在或已过期,向服务器发送GET请求获取favicon
威胁模型
指纹识别原理
利用Favicon实现用户追踪的技术原理:
- 状态检测:Web服务器可以判断浏览器是否已加载favicon
- 请求模式:
- 如果favicon不在F-Cache中,浏览器会发出请求
- 如果已存在,则不会发送请求
- 唯一标识生成:
- 通过组合不同URL路径的favicon请求状态(已请求/未请求)
- 为客户端分配唯一的模式(标识号)
- 重新识别:
- 当网站重新加载时,服务器根据客户端发送的favicon请求缺失情况重建标识号
技术特点
这种追踪技术具有以下显著特征:
- 持久性:几乎永久存储,难以清除
- 抗干扰性:
- 在匿名模式下仍可工作
- 不受以下操作影响:
- 刷新缓存
- 关闭/重启浏览器
- 系统重启
- 使用VPN
- 安装广告拦截器
- 跨浏览器支持:包括移动端浏览器在内的多种浏览器都受影响
工具实现
Supercookie工具
Supercookie是一种利用favicon实现用户追踪的具体实现:
环境准备
Docker方式运行:
- 克隆项目:
git clone https://github.com/jonasstrehle/supercookie - 修改配置文件
supercookie/server/.env:HOST_MAIN=yourdomain.com #或 localhost:10080 PORT_MAIN=10080 HOST_DEMO=demo.yourdomain.com #或 localhost:10081 PORT_DEMO=10081 - 启动容器:
cd supercookie/server docker-compose up
本地Node.js方式运行:
- 克隆项目:
git clone https://github.com/jonasstrehle/supercookie - 修改配置文件
supercookie/server/.env:HOST_MAIN=localhost:10080 PORT_MAIN=10080 HOST_DEMO=localhost:10081 PORT_DEMO=10081 - 启动服务:
cd supercookie/server node main.js
防御措施
虽然原文未提及防御方法,但基于技术原理可考虑:
-
浏览器设置:
- 禁用favicon加载
- 统一对所有网站请求favicon(破坏状态检测)
-
浏览器扩展:
- 开发专门拦截favicon追踪的扩展
- 使用隐私保护扩展如Privacy Badger
-
服务器端:
- 设置长期有效的favicon缓存策略
- 避免使用多变的favicon资源
-
协议层面:
- 推动浏览器修改favicon缓存机制
- 引入新的隐私保护标准
相关资源
- 项目地址:Supercookie GitHub
- 研究论文:Solomos et al. NDSS 2021
这篇文档详细介绍了利用favicon实现用户指纹识别的技术原理、实现方法和相关背景知识,关键点完整且无冗余信息。如需进一步了解具体实现细节,可参考提供的GitHub项目和学术论文。