跳至正文
中文
立即开始

Canvas 指纹识别

Canvas 指纹识别是一种浏览器识别技术,它将设备绘制图形时的细微差异转换为哈希值,帮助网站在不使用 Cookie 的情况下识别浏览器。

文章目录(8 个章节)

Canvas 指纹识别的工作原理

网站运行 JavaScript,在离屏 HTML Canvas 中绘制文本、形状和颜色,再通过 toDataURL() 或 getImageData() 读取渲染后的像素,通常还会对结果计算哈希值。

const canvas = document.createElement("canvas");
canvas.width = 240;
canvas.height = 40;
const ctx = canvas.getContext("2d");
ctx.font = "16px Arial";
ctx.fillText("example.com", 8, 24);
const pixels = canvas.toDataURL();

输出结果会因操作系统、已安装字体、浏览器版本和图形技术栈而异。Canvas 值不一定唯一,也不会永久不变,因此网站通常会将其与屏幕尺寸、用户代理等信号结合起来,形成更完整的浏览器指纹。

方法 信号 是否需要本地存储
Canvas 指纹识别 2D 像素渲染 否
WebGL 指纹识别 GPU 和 3D 渲染 否
Cookie 存储的标识符 是

浏览器、字体或驱动程序更新后,Canvas 和 WebGL 的值可能会变化。Cookie 是更精确的标识符,但用户可以删除或阻止 Cookie。

使用代理时为何需要关注 Canvas 指纹识别

代理会改变网站看到的 IP 地址,但不会改变 Canvas 输出,因为图形是在浏览器内绘制的。如果轮换 IP 时仍使用相同的 Canvas、Cookie 和其他浏览器信号,网站的机器人检测系统可能会将原本分开的请求关联起来。

网站还可能检查各项信号是否一致。例如,声称使用的操作系统与可用字体或图形渲染行为不符,就可能显得异常。更换代理无法修复这种不一致。

负责任地管理 Canvas 行为

  • 让相关会话保持一致。 对共享 Cookie、登录信息或其他状态的一系列操作,使用同一个稳定的浏览器环境。
  • 不要盲目随机化信号。 每打开一个页面就改变 Canvas 输出,可能造成信号不一致,也可能导致绘图工具无法正常工作。指纹浏览器可以隔离经授权的测试环境,但无法让自动化操作不被发现。
  • 遵守网站规则。 遵守使用条款和 robots.txt,将请求速率控制在合理范围内;如果网站提供官方 API,应优先使用。
  • 测试隐私设置。 浏览器的隐私保护功能可能会阻止读取 Canvas 或给结果添加噪声,但更严格的限制可能影响地图、编辑器和图表。

常见问题

可以,但并不完全可靠。Canvas 指纹识别不需要存储 Cookie 数据,但浏览器更新、隐私保护功能或设备变化都可能改变识别结果。

代理会改变我的 Canvas 指纹吗?

不会。代理会改变对外显示的 IP 地址,而 Canvas 渲染发生在浏览器内。若想同时改变两者,还需要另行采取浏览器层面的控制措施。

如何防止 Canvas 指纹识别?

可以使用浏览器内置的反指纹识别设置或阻止读取 Canvas,以减少信息暴露。这些控制措施可能导致使用 Canvas 显示图表、编辑图像或提供其他交互功能的网站无法正常运行。

相关术语

查看全部术语