ServiceWorkers 和 ServiceWorkerContainer.prototype.register 如何用于指纹识别和机器人检测

Car*_*son 5 javascript tracking bots fingerprinting

我经常看到具有高级机器人检测/指纹识别技术的网站,这些技术利用 ServiceWorkers 和/或 ServiceWorkerContainer.prototype.register。我不确定他们到底用它做什么。还有一个 Chrome 扩展 Dont FingerPrint Me,声称 ServiceWorkers 用于指纹识别,并提供检测网站何时进行指纹识别的功能。但是,它没有解释它们是如何使用的。我尝试通过阅读代码来理解它,但没有取得任何进展。

所以,我的问题是,如何将其用于指纹识别或检测机器人?我所说的机器人是指通过 selenium、远程调试器或其他自动化工具实现自动化的浏览器。

编辑:不幸的是,atm 我没有保存我之前遇到的使用该技术的一些网站的任何链接。如果我再次找到一个,我会更新这篇文章。

编辑:我被告知它们可以用来绕过浏览器可能正在运行的指纹拦截器并检测欺骗属性。但我不确定这些信息的有效性。

Bra*_*one 2

这个主题对我来说是新的,所以这可能并不详尽:

W3C 提供了有关 Service Worker 的隐私部分,其中包含以下内容:

服务工作线程引入了新的持久存储功能,包括范围到注册映射(用于服务工作线程注册及其服务工作线程)、请求响应列表和名称到缓存映射(用于缓存)以及脚本资源映射(用于脚本资源)。为了保护用户免受任何潜在的未经批准的跟踪威胁,当用户打算清除这些持久存储时,应该清除它们,并且应该维护现有的用户控件并与现有的用户控件进行互操作,例如清除所有现有的持久存储。源代码

查看来自 Google 的一些代码示例,似乎服务工作人员可以在其安装事件期间声明要缓存的任意数量的文件

self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('v1').then((cache) => {
      return cache.addAll([
        './sw-test/',
        './sw-test/index.html',
        './sw-test/style.css',
        './sw-test/app.js',
        './sw-test/image-list.js',
        './sw-test/star-wars-logo.jpg',
        './sw-test/gallery/',
        './sw-test/gallery/bountyHunters.jpg',
        './sw-test/gallery/myLittleVader.jpg',
        './sw-test/gallery/snowTroopers.jpg'
      ]);
    })
  );
});
Run Code Online (Sandbox Code Playgroud)

源代码

似乎可以想象,该服务缓存的任何文件都可能包含用户识别指纹以供进一步跟踪。

一个相关的威胁与 Service Workers 没有直接关系,但紧密耦合,是manifest.json 文件中的漏洞。

可以想象,可以设计start_url来指示应用程序是从浏览器外部启动的(例如,“start_url”:“index.html?launcher=homescreen”)。这对于分析和可能的其他自定义非常有用。然而,开发人员也可以将字符串编码到 start_url 中,以唯一标识用户(例如,服务器分配的 UUID)。这是用户可能不知道的指纹/隐私敏感信息。

鉴于上述情况,建议在安装时或安装后的任何时间,用户代理允许用户检查并在必要时修改应用程序的起始 URL。源代码

进一步阅读

我发现至少有 1 个 SO 帖子试图将Fingerprintjs2合并到 Service Worker 中:

我发现这篇博客文章介绍了如何使用 Google Analytics 使用 Service Workers 收集 PWA 中的在线和离线用户指标。