初探Web客户端追踪技术

前言

案例1

当我们首次浏览网站时,在网页的下方位置经常会出现提示,询问是否允许使用 Cookie 来提供服务和流量。为了不被挡住浏览的内容,我们经常会下意识地点击“接受”,然后继续浏览。看似无害而有害增强你在这个网站上的体验的操作,然而很多人没有意识到,当你点下按钮后,网站会塞给你一块饼干(Cookie),接着用这个饼干来换取你的相关信息,甚至能追踪你在网站上的足迹。例如你在当前页面语言选择了“中文”,那么下次再进入到这个网站时,会默认帮你选择“中文”语言。

2488387931.jpg

案例2

在某个网站登录账号时,用户有时候会忘记密码,输入多次后触发了网站的风险机制(如验证码校验),这个时候用户换了另外一个账号登录,然而对于新的账号登录,网站仍然会让当前设备用户处于风险机制中。其原因之一便是你的设备指纹在当前某个时间段内被列入风险用户名单中,在这段时间内,你会持续的触发风险机制。

20230213100234.jpg

常见追踪技术

Cookie追踪

Cookie 是很多网站用于追踪用户行为的手段,服务端会在 HTTP/HTTPS 的响应头部返回 Set-Cookie 字段,浏览器将其自动保存。

对于属于当前网站的 Cookie 的所属域(Domain)中,又可以分为第一方 Cookie(以自身网址后缀存储)和第三方 Cookie(以非自身网站后缀存储)。

2301781751.jpg

当我们在微博上浏览新闻资讯,这个时候可以会刷到某购物网站内嵌的广告,这时候浏览器会同时存在微博和该购物网站的 Cookie ,并且还会惊讶的发现,微博给我们推送的资讯和推荐的广告都符合我们近期浏览的相关内容,这个时候我们便清楚,原来我们的访问行为已经被分析计算出来。

第一方 Cookie

第一方 Cookie 常指的是由当前用户访问的域生成的 Cookie。

当你使用账号登录后,网站会返回属于你的 Cookie,该 Cookie 的所属域是属于当前网站的,Cookie 中还记录着关于你身份的相关信息。使用明确身份在某宝PC购物网站上搜索了“充电器”,用相同的用户登录移动端APP,会得到相似类型的推荐。

1606075787.jpg

image-20221120170035193_副本.png

第三方 Cookie

第三方 Cookie 常指某个 Cookie 的域并不是当前所访问网站的域,一般通过 JS 脚本,图片链接和 iframe 等技术生成。常见的有:

  1. 广告网络商。 如熟悉的 Google Adsense,谷歌通过它们识别大量用户行为,在多个网站中进行广告投放;
  2. 大平台下拥有多个子平台,进行某些用户数据跟踪。 如上购物网站,无论是 PC 还是移动端,都源于是同一个平台,即相同域下面。而第三方 Cookie 针对的是不同域下的平台,去预判用户行为和推荐用户的商品。如果在上述购物网站旗下的另一平台上,也对应着推送用户曾经浏览的商品。

image-20221120170704254.png

Flash Cookie

我们常说的 Cookie 一般都是指基于浏览器的 HTTP Cookie。可想,一台用户电脑上安装了多个浏览器,虽然登录的身份是同一个用户,但是却对应着多个 HTTP Cookie,且 HTTP Cookie 存在着过期时间和存储大小限制,所以Cookie 存在着被自动销毁的场景,这个时候 Flash Cookie 技术便可以解决这些问题。

Flash Cookie 顾名思义即通过 Flash 插件来实现本地存储 Cookie,也称之为 Share Object。尽管各个不同的浏览器是隔离的,但是每个浏览器都可以通过Flash 获取 Cookie,除非人为主动去删除,否则 Cookie 可以被持久存储在本地共享对象中。

提及 Flash Cookie,不得不提到 Evercookie 技术。该技术于 2010 年十大黑客技术排行榜中位居第二。Evercookie 使用不同的存储技术将 Cookie 缓存在浏览器、系统中,其中包含着 HTTP Cookie, HTML5 的 LocalStorage/ SessionStorage/globalStoage,Flash Cookie 等多种技术,在用户清除了浏览器 Cookie 数据之后仍能将数据重新恢复。但随着各大浏览器不支持 Flash 技术,Flash Cookie 技术也随着不攻自破。

浏览器指纹追踪

上述的 HTTP Cookie 和 Supper Cookie 都有可能存在着被删除或者禁用的风险,并且随着广告拦截器和 Cookie 清除工具越发高明,单单 Cookie 这项技术就不似那么稳妥了,于是众人又将目光投向浏览器指纹。浏览器指纹是通过对多种特征信息综合分析计算后,生成无状态的客户端指纹,指纹具有唯一性,能够被识别、追踪用户行为和隐私数据。

浏览器的基本特征

所有浏览器应该具备的特征信息称之为浏览器的基本特征其中包含浏览器信息,计算机信息,硬件信息等,这些特征信息综合后得出的指纹仍然会存在相同的碰撞,所以尽管基本特征已经够多,但仍然无法确定用户的身份,还需要更多的信息来参与计算得出最终唯一的指纹。查看当前浏览器的相关信息。

特征信息获取方式
浏览器中的浏览器扩展/插件IE: ActiveXObject  非IE: window.navigator.plugins
浏览器是否执行 JavaScript 脚本script标签中判断脚本是否执行
浏览器是否接受各种 Cookie 和Supper Cookie的信息window.navigator.cookieEnabled
浏览器是否发送 Do Not Track 标头window.navigator.doNotTrack
浏览器是否支持触屏document.hasOwnProperty("ontouchstart")
浏览器语言window.navigator.language
user-Agentwindow.navigator.userAgent
时区偏移量new Date().getTimezoneOffset()
地区经纬度HTML5 Geolocation
操作系统window.navigator.platform
屏幕信息window.screen
b2b3

硬件指纹

音频指纹:AudioContext

利用设备音频设置,把播放音频文件的方式模拟成一个正弦函数,再把正弦函数转化成哈希函数,作为附加熵,结合浏览器的基本特征信息,生成音频指纹。

使用 HTML5 AudioContext API 进行指纹识别,AudioContext 指纹是计算机音频堆栈本身的属性,并不会收集计算机播放和录制的声音。

1393337913.jpg

Canvas 指纹

使用 HTML5 提供的 Canvas API 绘制隐藏元素图片,相同的 Canvas 代码在不同的计算机上绘制出的结果也会出现差异,尽管在肉眼上很难看出区别。这是因为浏览器、操作系统、GPU 和图形驱动器任一设备的不同,都会导致绘制图画时渲染的方式不一样,而这恰恰是指纹的唯一识别。

1054475719.jpg

WebRTC 指纹

浏览器提供 WebRTC 功能,通过 UDP 协议建立连接,从而获取到公共 IP 地址、本地 IP 地址和媒体设备(如摄像头、麦克风)的数量及其哈希值。由于是通过 UDP 协议,所以即便是使用了代理,网站也能够获取到真实的公共和本地 IP 地址。

3970425793.jpg

WebGL 指纹

  1. WebGL 是一个 JavaScript API,可在任何兼容的 Web 浏览器中渲染高性能的交互式 3D 和 2D 图形。不同组合的硬件设备会将该图形转换成唯一的hash值 综合指纹
  2. 分析计算指纹的方法还有许多,以上四种巧妙的方法仍然会出现指纹碰撞的几率。但通过各种综合计算出哈希值的指纹,能够提高它的唯一性。目前已有开源的浏览器指纹库 ,可查询浏览器属性并从中计算出哈希值,生成浏览器指纹。

防范措施

无痕浏览器

目前基本主流浏览器都支持无痕模式,但是只能拦截住一部分的浏览器追踪痕迹。

禁用 JavaScript 和 Cookie

此方法乃为杀敌一千自损八百,前端大多主流的框架都是由 JavaScript 加载执行渲染,禁用 JavaScript 可能会导致页面异常。但是可以通过禁用第三方的 JavaScript 和 Cookie,但是仍需慎用

禁用 WebRTC 和 Geolocation

通过浏览器的设置,禁用 WebRTC 和 Geolocation,但是此行为也会影响部分网站的体验。

使用防追踪浏览器

候鸟浏览器通过欺骗站点所能够获取到的参数,修改数字指纹,使得网站读取的与你真实的指纹不同,从而达到防追踪的目的。

结论

浏览器的追踪技术是一把双刃剑,它建立了用户个人信息和网站之间的连接,合理地使用能够大大提高用户的体验,但是同时也存在着隐私泄漏。此前,谷歌和亚马逊均因违规使用 Cookie 而面临着巨额罚单,315 晚会上也多次曝光多家互联网公司窃取侵犯用户隐私信息。尽管这些都骇人听闻,但在国际上大部分国家抓取 Cookie 并不违法,只要合理使用,用户也不用过分恐慌,毕竟无论是 Cookie 还是浏览器指纹能提供的用户信息相对有限。尊重科学精神,提倡文明上网。

作者:政采云技术
链接:https://juejin.cn/post/7226004363995021367
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/405455.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB | 超多样式聚类分析树状图任你选择~~

这几天写了一个代码很长的聚类分析树状图绘图工具函数(上一期文章立的flag总算实现了),能够比较轻松的绘制以下图形: 工具基本已经成型了,未来有需求未来有空再加哈哈哈,要求MATLAB至少需要17b版本&#xf…

微服务篇之分布式事务

一、Seata架构 Seata事务管理中有三个重要的角色: TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、…

Leetcode日记 2583. 二叉树中的第 K 大层和

Leetcode日记 2583. 二叉树中的第 K 大层和 题目:解题思路:代码实现制作不易,感谢三连,谢谢啦 题目: 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k 大的层和…

欢迎 Gemma: Google 最新推出开源大语言模型

今天,Google 发布了一系列最新的开放式大型语言模型 —— Gemma!Google 正在加强其对开源人工智能的支持,我们也非常有幸能够帮助全力支持这次发布,并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型:7B 参数…

idea配置javafx

一、下载sdk 在jdk8之后,需要下载sdk包 📎javafx-sdk-18.zip 这里适用的jkd版本如图 二、配置 创建一个项目之后,进行如下配置,将sdk导入到项目中 配置启动参数 可以使用-号将之前的去掉,创建一个新的 打开下面的V…

MyBatisPlus条件构造器和常用接口

前置配置文章 一、wapper介绍 wrapper的继承体系: Wrapper : 条件构造抽象类,最顶端父类 AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件 QueryWrapper : 查询条件封装UpdateWrapper &#x…

windows 11+docker desktop+grafana+influxDB

下载安装docker desktop 出现WSL相关的错误。WSL是一个linux内核的子系统,docker是基于linux内核的,所以运行docker需要WSL。 以管理员权限打开powershell,查看WSL状态 wsl --status 我遇到的错误是因为我关闭了windows的某些更新 执行上…

2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架

应用介绍 本文来自:2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架 - 源码1688 简介: 2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于thinkphp框架 图片:

每日一题——LeetCode1502.判断是否能形成等差数列

方法一 排序 var canMakeArithmeticProgression function(arr) {arr.sort((a,b)>a-b)let diff arr[1]-arr[0]for(let i1;i<arr.length;i){if(arr[i]-arr[i-1]diff) continueelse return false}return true }; 消耗时间和内存情况&#xff1a; 方法二 数学方法 找出ar…

SpringBoot实现缓存预热方案

缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。 那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系统呢? 实现方案概述 在 Spring Boot 启动之后,可以通过以下手段实现缓存预热: 使用…

开源的表单设计器拥有什么显著特点?

开源的表单设计器的特点是什么&#xff1f;广州流辰信息是专业研发低代码技术平台的服务商&#xff0c;可以为企业提供系统开发、数据治理、数据分析各环节技术和方案支撑。为了帮助大家了解开源的表单设计器的相关优势特点&#xff0c;小编将为大家做一个详细介绍。 什么是开源…

陪玩软件系统的开发-用PHP书写,uni开发的陪玩平台更有质量-线上线下功能齐全-APP小程序H5公众号都有,源码交付!

线上陪玩系统的功能 在线预订&#xff1a;用户可以在陪玩系统中在线预订陪玩服务&#xff0c;系统会根据用户的订单要求自动匹配陪玩人员。 指定搜索&#xff1a;用户可以通过搜索指定的ID来找到他们想要的陪玩人员。 在线交流&#xff1a;在陪玩系统中提供在线沟通功能&…

Jmeter之单接口的性能测试

前言&#xff1a; 服务端的整体性能测试是一个非常复杂的概念&#xff0c;包含生成虚拟用户&#xff0c;模拟并发&#xff0c;分析性能结果等各种技术&#xff0c;期间可能还要解决设计场景、缓存影响、第三方接口mock、IP限制等问题。如何用有限的测试机器&#xff0c;在测试环…

Python 实现 ATR 指标计算(真实波幅):股票技术分析的利器系列(10)

Python 实现 ATR 指标计算&#xff08;真实波幅&#xff09;&#xff1a;股票技术分析的利器系列&#xff08;10&#xff09; 介绍算法解释 代码rolling函数介绍核心代码 完整代码 介绍 ATR&#xff08;真实波幅&#xff09;是一种技术指标&#xff0c;用于衡量市场波动性的程…

视频评论挖掘软件|抖音视频下载工具

针对抖音视频下载的需求&#xff0c;我们开发了一款功能强大的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。因此&#…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…

算法沉淀——FloodFill 算法(leetcode真题剖析)

算法沉淀——FloodFill 算法 01.图像渲染02.岛屿数量03.岛屿的最大面积04.被围绕的区域05.太平洋大西洋水流问题06.扫雷游戏07.衣橱整理 Flood Fill&#xff08;泛洪填充&#xff09;算法是一种图像处理的基本算法&#xff0c;用于填充连通区域。该算法通常从一个种子点开始&am…

力扣经典题目解析--下一个排列(字节面试题)

这是一道中等难度的字节秋招面试题&#xff0c;很多伙伴都被问到了&#xff0c;同时也有很多同学表示连题目都看不懂&#xff0c;我们来看下原题 原题 题目地址: . - 力扣&#xff08;LeetCode&#xff09; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例…

(九)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - maven构建ant-framework核心代码Base封装

今天重点讲解的是ant-framework核心代码Base封装过程。 因为涉及到springmvc、mybatis的集成&#xff0c;为了使项目编码更简洁易用&#xff0c;这边将基础的BASE进行封装&#xff0c;其中包括&#xff1a;BaseBean、BaseDao、BaseService、CRUD的基础封装、分页组件的封装、m…