如何通过图标来识别网站用户指纹
字数 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的处理有以下特点:

  1. F-Cache:浏览器将favicon缓存在一个单独的本地数据库中
    • 缓存项包含:访问的URL(子域、域、路由、URL参数)、favicon ID和生存时间(TTL)
  2. 加载流程:
    • 浏览器首先检查本地F-Cache中是否有活动网站URL的条目
    • 如果存在,从缓存加载图标
    • 如果不存在或已过期,向服务器发送GET请求获取favicon

威胁模型

指纹识别原理

利用Favicon实现用户追踪的技术原理:

  1. 状态检测:Web服务器可以判断浏览器是否已加载favicon
  2. 请求模式
    • 如果favicon不在F-Cache中,浏览器会发出请求
    • 如果已存在,则不会发送请求
  3. 唯一标识生成
    • 通过组合不同URL路径的favicon请求状态(已请求/未请求)
    • 为客户端分配唯一的模式(标识号)
  4. 重新识别
    • 当网站重新加载时,服务器根据客户端发送的favicon请求缺失情况重建标识号

技术特点

这种追踪技术具有以下显著特征:

  • 持久性:几乎永久存储,难以清除
  • 抗干扰性
    • 在匿名模式下仍可工作
    • 不受以下操作影响:
      • 刷新缓存
      • 关闭/重启浏览器
      • 系统重启
      • 使用VPN
      • 安装广告拦截器
  • 跨浏览器支持:包括移动端浏览器在内的多种浏览器都受影响

工具实现

Supercookie工具

Supercookie是一种利用favicon实现用户追踪的具体实现:

环境准备

Docker方式运行:

  1. 克隆项目:
    git clone https://github.com/jonasstrehle/supercookie
    
  2. 修改配置文件supercookie/server/.env
    HOST_MAIN=yourdomain.com #或 localhost:10080
    PORT_MAIN=10080
    HOST_DEMO=demo.yourdomain.com #或 localhost:10081
    PORT_DEMO=10081
    
  3. 启动容器:
    cd supercookie/server
    docker-compose up
    

本地Node.js方式运行:

  1. 克隆项目:
    git clone https://github.com/jonasstrehle/supercookie
    
  2. 修改配置文件supercookie/server/.env
    HOST_MAIN=localhost:10080
    PORT_MAIN=10080
    HOST_DEMO=localhost:10081
    PORT_DEMO=10081
    
  3. 启动服务:
    cd supercookie/server
    node main.js
    

防御措施

虽然原文未提及防御方法,但基于技术原理可考虑:

  1. 浏览器设置

    • 禁用favicon加载
    • 统一对所有网站请求favicon(破坏状态检测)
  2. 浏览器扩展

    • 开发专门拦截favicon追踪的扩展
    • 使用隐私保护扩展如Privacy Badger
  3. 服务器端

    • 设置长期有效的favicon缓存策略
    • 避免使用多变的favicon资源
  4. 协议层面

    • 推动浏览器修改favicon缓存机制
    • 引入新的隐私保护标准

相关资源

  1. 项目地址:Supercookie GitHub
  2. 研究论文:Solomos et al. NDSS 2021

这篇文档详细介绍了利用favicon实现用户指纹识别的技术原理、实现方法和相关背景知识,关键点完整且无冗余信息。如需进一步了解具体实现细节,可参考提供的GitHub项目和学术论文。

通过Favicon实现网站用户指纹识别技术详解 背景知识 Favicon基础 Favicon(网站图标)是现代浏览器提供的一种用户体验增强功能: 尺寸通常为16×16或32×32像素 显示在地址栏和书签列表中的页面名称旁边 通过HTML中的 <link> 标签引入: 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方式运行: 克隆项目: 修改配置文件 supercookie/server/.env : 启动容器: 本地Node.js方式运行: 克隆项目: 修改配置文件 supercookie/server/.env : 启动服务: 防御措施 虽然原文未提及防御方法,但基于技术原理可考虑: 浏览器设置 : 禁用favicon加载 统一对所有网站请求favicon(破坏状态检测) 浏览器扩展 : 开发专门拦截favicon追踪的扩展 使用隐私保护扩展如Privacy Badger 服务器端 : 设置长期有效的favicon缓存策略 避免使用多变的favicon资源 协议层面 : 推动浏览器修改favicon缓存机制 引入新的隐私保护标准 相关资源 项目地址: Supercookie GitHub 研究论文: Solomos et al. NDSS 2021 这篇文档详细介绍了利用favicon实现用户指纹识别的技术原理、实现方法和相关背景知识,关键点完整且无冗余信息。如需进一步了解具体实现细节,可参考提供的GitHub项目和学术论文。