初探Web客户端追踪技术

news2025/2/24 7:42:46

前言

案例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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot财务管理系统源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

C# cass10 宗地初始化-根据 “预编号” “权利人”图层对应信息 批量添加到宗地图层

运行环境Visual Studio 2022 c# cad2016 cass10 根据 “预编号” “权利人”图层对应信息 批量添加到宗地图层 一、主要步骤 zdimport 方法:这个方法用于导入宗地信息。首先通过调用 AutoCAD API 获取当前活动文档、数据库和编辑器对象。然后根据 CreatePalette.Se…

CSB ----> XXE靶场记

小记&#xff1a;XXE的靶场 1.XXE的触发基本条件 想要触发XXE靶场&#xff0c;必须满足以下的条件 网站开启了外部实体解析libxml<2.9.0 版本 默认开启了外部实体解析&#xff1a;默认开启了外部实体解析网站管理员开启了外部实体解析&#xff08;不过这个一般不太可能&a…

android 15

https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html android 15的预览版出了&#xff0c;这个版本的发布计划大概是这样的&#xff08;大约是今年8月发布最终版本&#xff09; https://developer.android.com/about/versions/15/over…

vue3中使用vuedraggable实现拖拽el-tree数据进分组

看效果&#xff1a; 可以实现单个拖拽、双击添加、按住ctrl键实现多个添加&#xff0c;或者按住shift键实现范围添加&#xff0c;添加到框中的数据&#xff0c;还能拖拽排序 先安装 vuedraggable 这是他的官网 vue.draggable中文文档 - itxst.com npm i vuedraggable -S 直接…

Kubernetes安装nginx-controller作为统一网关

nginx-controller是什么呢? 它是一个能调度nginx的一个kubernetes operator,它能监听用户创建,更新,删除NginxConf对象,来调度本地的nginx实现配置的动态更新。如添加新的代理(http,https,tcp,udp),缓存(浏览器缓存,本地缓存),ssl证书(配置本身,ConfigMap,Secret),更新,删除等…

Js的 Promise的 then catch 笔记240222

Js的 Promise的 then catch 笔记240222 基本用法 new Promise(f>{setTimeout(ev>{f("一秒后输出控制台");},1000); }).then(f的参数>{console.log(f的参数); }); // 控制台输出: 一秒后输出控制台上面代码中, f 的标准名叫做 resolve , 所以应该写成 new …

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

【Python笔记-设计模式】原型模式

一、说明 原型模式是一种创建型设计模式&#xff0c; 用于创建重复的对象&#xff0c;同时又能保证性能。 使一个原型实例指定了要创建的对象的种类&#xff0c;并且通过拷贝这个原型来创建新的对象。 (一) 解决问题 主要解决了对象的创建与复制过程中的性能问题。主要针对…

有哪些适合程序员的副业?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

QT_day4

1.思维导图 2. 输入闹钟时间格式是小时:分钟 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);id startTimer(1000);flag1;speecher new QTextT…

基础数据结构和算法《》

递归 1.递归应该一种比较常见的实现一些特殊代码逻辑时需要做的&#xff0c;但常常也是最绕的一种方式&#xff0c;在解释递归 之前&#xff0c;我们用循环和递归来做个比较1.1.如果你打开一扇门后&#xff0c;同样发现前方也有一扇们&#xff0c;紧接着你又打开下一扇门...直…

应用回归分析:泊松回归

泊松回归是一种广泛用于计数数据的回归分析方法。它适用于响应变量是非负整数的情况&#xff0c;特别是当这些计数呈现出明显的离散分布时。泊松回归通过泊松分布的概率分布函数来建模计数数据&#xff0c;使其成为处理计数数据的自然选择。本文将介绍泊松回归的基本概念、应用…

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…

进程线程通信-day6

1、将信号和消息队列的课堂代码敲一遍 //发送端 #include<myhead.h>//定义一个消息结构类型 struct msgbuf {long mtype;char mtext[1024]; }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

Kotlin 进阶 学习 委托

1.接口委托 package com.jmj.jetpackcomposecompositionlocal.byStudy/*** 接口委托*/ interface HomeDao{fun getAllData():List<String> }interface ADao{fun getById(id:Int):String }class HomeDaoImpl:HomeDao{override fun getAllData(): List<String> {ret…

MATLAB中的稀疏矩阵和密集矩阵

在MATLAB中&#xff0c;矩阵可以表示为密集或稀疏格式。通常&#xff0c;矩阵默认以密集格式存储&#xff0c;这意味着每个元素都明确地存储在内存中&#xff0c;无论它的值是多少。然而&#xff0c;当矩阵含有大量的零元素时&#xff0c;这种存储方式就会变得非常低效。为了更…

iOS整理 - 关于直播 - 搭建服务端

前言 其实本人一直都想自己简单做一套直播&#xff08;包括移动端和服务端&#xff09;的开发测试&#xff0c;但是之前一直做得比较迷茫。最近偶然间在来了灵感&#xff0c;瞬间解除了我很多疑惑。我会分享出来&#xff0c;希望大家一起研究下。稍后&#xff0c;我完整做好了…

ZS Associates致盛咨询是什么公司?排名怎么样?

随着商业化时代的加速演进&#xff0c;咨询公司在企业发展中的“智囊团”角色愈发突显。对于医药企业来说&#xff0c;一个优秀的咨询团队不仅可以帮助推动整体战略转型及内部改革&#xff0c;还对药品研发、营销起到优化促进作用。 那什么样的咨询企业可称之为优秀的咨询企业…