什么是 Canvas 指纹?渲染信号解析

什么是 Canvas 指纹?

Scrapeless Agent Browser 为网页自动化和 AI agents 提供云端浏览器。

Canvas 指纹是一种技术,它在浏览器中绘制一幅受控图像,读取渲染输出,并将该输出中的差异用作浏览器特征。得到的值可以作为更广泛指纹的一部分,用于识别、分析或安全决策。

该技术衡量的是渲染行为。它不会直接暴露一个人的姓名,单独的 canvas 结果也不应被视为永久或全球唯一的身份。

总结

  • Canvas 指纹通过比较渲染输出来工作。 绘图指令可以完全相同,而生成的像素却可能不同。
  • 哈希用于对测量结果进行摘要。 哈希并不会让常见结果变得唯一,也不会让不稳定结果变得永久。
  • 使用 canvas 并不自动等同于指纹识别。 游戏、图表、图像编辑器和安全检查都可以使用相同的浏览器 API。
  • 浏览器变更可能会影响结果。 应在定义好的环境和测量方法内理解稳定性。

Canvas 测量是如何产生的

一次 canvas 测量从绘图指令开始,以渲染图像的某种表示结束。脚本可以绘制文本、形状或重叠颜色,然后读取图像数据或序列化 canvas。它可以直接比较这些结果,也可以计算摘要以便存储。

其中 HTML canvas 渲染与回读模型 定义了浏览器所涉及的绘制表面。绘图 API 本身是通用功能。指纹识别来自脚本如何利用输出表征一个环境,而不是来自单纯存在一个 canvas 元素。

一次测量有多个输入:绘制序列、选用的字体和尺寸、渲染实现,以及周围的浏览器环境。如果脚本改变了绘图指令,即使在同一台机器上输出也可能改变。因此,在未识别测量方法的情况下比较这些值,可能会得出误导性的结论。

为什么相同的绘图指令会产生不同结果

渲染输出可能不同,因为浏览器和运行环境不一定以完全相同的方式处理每一步绘图操作。文本渲染是常见例子:字体可用性和光栅化过程会影响边缘像素、间距和抗锯齿。

对于特定测试,颜色处理和图形实现也可能很重要。每个因素的相关性取决于绘图实际触及的内容。简单的实心矩形与复杂的文本组合不会暴露相同的特性。应避免声称每个 canvas 测试都在测量显卡,或每一个像素差异都揭示硬件身份。

需要区分 canvas 指纹与 WebGL 指纹。二者都与渲染相关,但可以查询不同的接口并暴露不同的观测结果。站点可以将它们组合使用,但不应轻率地把其中一种结果当作另一种证据来描述。

像素、编码图像与哈希

指纹可以对原始像素数据或编码后的图像进行摘要,这些选择会影响实际比较的是什么。脚本在赋予差异以含义之前,应先定义其输入和输出的表示方式。

其中 PNG 图像表示规范 描述的是一种图像格式,而不是浏览器身份格式。如果某个测试对序列化图像进行哈希,其值代表的是该编码输出。出现不同的值时,应先检查底层测量,而不是立刻断言出现了不同的人或设备。

哈希不会创造额外的识别信息。如果很多客户端产生相同的 canvas 输出,它们也会产生相同的摘要。如果输出在更新后发生变化,其摘要也可能随之改变。关键问题在于:对于被研究的人群和时间跨度而言,底层测量在区分度和稳定性方面如何。

Canvas 指纹与 Cookie 的比较

Cookie 存储的是显式状态,而 canvas 指纹是从浏览器行为中推导观察结果。服务可以同时使用两者,但清除一种状态不一定会消除另一种。

特性CookieCanvas 测量
来源由浏览器存储的一个值。由渲染输出推导出的一个值。
连续性取决于存储状态及其作用域。取决于环境以及测试的稳定性。
含义由使用它的应用定义。由测量及其比较方式定义。
诊断需求检查存储和传输。检查绘图输入和输出表示。

这种比较说明了为什么隐私审查应同时检查存储和测量。脚本可以在不写入持久标识符的情况下收集浏览器特征。这种收集是否适当,取决于其目的、保留时间、可关联性以及适用的合规要求。

Canvas 读取能证明什么,不能证明什么

一次 canvas 读取可以证明代码请求了图像输出,但无法确定该请求的目的。图像编辑器可能在导出绘图;图表工具可能在生成下载;安全脚本可能在描述运行环境。

追踪数据流。确定是哪段脚本发起了绘制、渲染了什么内容、随后进行了哪种回读操作,以及是否传输了派生值。在不相关页面中反复使用,可能与跟踪调查相关,但结论仍然需要关于接收方和关联性的证据。

参见 W3C 关于指纹识别隐私风险的指南 以获得评估可识别特征及缓解措施的更广泛框架。隐私结论应考虑接收方可获得的信息组合,而不是因为某个值没有名称就假定它是无害的。

在你自己网站上的受控调查

受控的 canvas 调查是在已记录条件下比较同一项测试。从你有权检查的页面和脚本开始,并在收集结果之前保留绘制输入。

  1. 识别与所研究行为相关的脚本和 canvas 操作。
  2. 记录浏览器版本、运行环境、字体假设和隐私设置。
  3. 定义比较是使用像素、序列化图像字节还是摘要。
  4. 在不改变环境的情况下比较重复观测结果。
  5. 更改一个相关条件,并检查输出中发生变化的部分。

对于示例性的字体测试,在受控字体更改前后比较一次文本绘制。结果可以显示对该条件的敏感性;但它不能证明该值可以识别互联网上的每一个浏览器。提出一般性的唯一性主张需要定义人群和适当的测量方法,而不是比较少数本地会话。

除非必要,不要在共享的事件工单中保留原始图像和完整指纹。对于测量方式及观察到的差异,经过编辑的说明可能就足以诊断兼容性问题。保留时间应与调查目的相匹配。

稳定性、隐私设置与兼容性

Canvas 的稳定性取决于浏览器环境和测量过程。浏览器更新、字体变化或隐私功能都可能改变暴露的输出。应将这些变化视为需要记录的条件,而不是恶意客户端的自动证据。

隐私保护同样会影响正常的图形工作流。如果用户无法导出图像,请直接调查出错的操作和浏览器策略。不要假设必须在整个站点禁用指纹防御才能恢复某个功能。将兼容性修改限定在用户的实际任务范围内。

对于站点所有者,只收集为既定目的所需的信号。记录接收方和保留时间,并评估较少可识别的信息是否也能支持同样的决策。对测量结果进行哈希处理可能简化存储,但本身并不能消除可关联性或解决隐私义务。

浏览器自动化与 Canvas 结果

浏览器自动化可以渲染 canvas 内容,但一次成功的 canvas 操作并不能保证身份一致性或对另一网站的访问。 Scrapeless Agent Browser 为受支持的自动化任务提供浏览器执行环境。

该产品的合适起点是 Agent Browser 文档 。更广泛的 浏览器指纹识别说明 则将 canvas 置于其他可观测信号之中。请根据你的工作负载查看 Scrapeless 定价 并验证任务实际需要的渲染结果。

结论

Canvas 指纹是从渲染输出中推导出的特征。应结合其绘制过程、表示形式和环境来解读结果。对于调试,请比较受控观测;对于隐私审查,请跟踪数据及其接收方。缺乏这些背景的摘要几乎无法说明关于稳定性、唯一性或用户意图的任何内容。

使用浏览器检查已渲染页面

在经授权的渲染工作流中使用 Agent Browser,并将 canvas 观测与关于身份或权限的结论分开。

立即注册即可获得 $5 的免费额度 — 无需信用卡.

领取你的 $5 额度 →

常见问题

问:每一个 canvas 元素都用于指纹识别吗?

canvas 元素并不会自动用于指纹识别。Canvas 支持普通图形、图表、图像编辑和导出。应通过检查绘制、回读以及结果的后续使用来确定其目的。

问:清除 cookie 能移除 canvas 指纹吗?

清除 cookie 会移除已存储的 cookie 状态,但不一定会改变通过 canvas 测试测量到的渲染特征。结果取决于浏览器环境以及具体的绘制过程。

问:canvas 指纹是唯一的设备标识符吗?

不应假定 canvas 指纹是唯一的设备标识符。不同环境可能产生相同结果,而且同一环境也可能随时间发生变化。唯一性和稳定性需要针对相关的测量方式和人群提供证据。

问:对 canvas 结果做哈希处理会让它变得匿名吗?

对 canvas 结果进行哈希处理并不会自动使其匿名。一个稳定的摘要仍然可以支持跨多次观测的关联。应评估接收方可以将其与什么信息结合,以及这些信息会被保留多长时间。

参考文献