学习目标
阅读本文后,您将能够:
- 说明 Canvas 指纹比较的是渲染结果
- 指出哪些环境因素会让同一段图画出差别
- 分清结果相同不等于同一台设备
它在比较什么
网站给浏览器同一组绘图指令,然后读取画布上的结果。
结果可以是一块图像,也可以被算成一串摘要,方便和其他时候的结果比较。摘要变了,表示画出来的内容有差别。摘要相同,表示这次比较里看到的结果一样。
页面不是在问「你的电脑序列号是什么」。它是在问:这套环境把这段图画成了什么样。
为什么同一段图会不同
画布怎么落笔,取决于当时参与渲染的一整条路径。
- 操作系统的图形和字体组件
- 显卡与图形驱动
- 浏览器自己的绘图实现
- 系统里实际用来画字的字体
这些条件有一项不同,像素就可能不同。所以 Canvas 看的是这条渲染路径,不是单一硬件型号。
相同和不同各说明什么
看结果时,要问的是「这次画的是不是同一套环境」,而不是直接换成「是不是同一个人」。
结果相同,说明在这次测试里,两边的渲染输出对上了。很多普通环境的结果本来就相近,所以相同很常见。
结果不同,说明渲染路径至少有一处不一样。用户换了浏览器、系统更新了图形组件、字体变了,都可能造成这种不同。
为什么一段绘图也算信号?
请求里的版本号是浏览器声明的。Canvas 是让浏览器真的画一次。声明可以缩短,这段渲染路径仍然会留下环境之间的差别。它因此成为指纹里常见的一层,但只是一层。
它不是设备身份证
- Canvas 结果相同,不能证明是同一台设备。
- Canvas 结果不同,不能证明是两个用户。
- 它受系统、字体、浏览器和图形组件共同影响,不是单一硬件编号。
- 隐私浏览器可能改变或挡住这类测试,页面就不一定拿到原来的结果。
常见问题
网站会不会把我的屏幕画面传走?
不会。它让浏览器在一块画布上按指令绘图,再读取这块画布的结果,不是截取您的桌面。
Canvas 哈希是不是我的设备 ID?
不是。哈希只是这次绘图结果的摘要。环境一变,摘要就可能变。
关掉图片加载,还有 Canvas 指纹吗?
Canvas 测试是页面自己画,不依赖您打开某张照片。脚本能跑,这类测试通常仍能做。