0

0

javascript如何实现浏览器指纹识别【教程】

夜晨

夜晨

发布时间:2026-01-28 16:19:38

|

982人浏览过

|

来源于php中文网

原创

浏览器指纹识别依赖JS采集稳定特征生成哈希,主流浏览器中仍可用的包括navigator.platform、screen尺寸、colorDepth、availWidth/availHeight、timeZone及WebGL参数,但plugins和字体枚举已基本失效。

javascript如何实现浏览器指纹识别【教程】

浏览器指纹识别在现代 Web 开发中主要用于反爬、风控或设备去重,但JavaScript 无法直接“识别”完整指纹——它只能采集可访问的环境特征,拼成一个高区分度的哈希值;且受浏览器策略(如 Safari 的 ITP、Firefox 的 ETP)限制,很多传统指标已失效或返回恒定值。

哪些 JS API 能稳定采集指纹特征

不是所有属性都可靠。以下字段在主流浏览器(Chrome 115+、Firefox 110+、Edge 115+)中仍具备一定区分度,且无需权限:

  • navigator.userAgent:已弱化(Chrome 101+ 启用 UA-CH 后返回通用字符串),仅作辅助
  • navigator.platformnavigator.hardwareConcurrencyscreen.width/screen.heightscreen.colorDepth:相对稳定,但虚拟机/远程桌面可能统一值
  • self.screen.availWidthself.screen.availHeight:比 screen.width 更难被脚本覆盖
  • new Date().getTimezoneOffset():注意时区可能被手动修改
  • Intl.DateTimeFormat().resolvedOptions().timeZone:更准确的时区,但部分隐私模式下返回 "undefined"
  • canvas.getContext('2d').getImageData(0,0,1,1):绘制文本后读取像素,可反映 GPU/字体渲染差异;但 Firefox 112+ 默认禁用跨域 canvas 读取,需确保同源

为什么 navigator.plugins 和 fonts 指纹越来越不可靠

这两个曾是强区分项,现在基本失效:

  • navigator.plugins:Chrome 110+、Edge 115+ 已返回空数组;Firefox 默认隐藏插件列表(除非用户启用 privacy.resistFingerprinting 为 false)
  • 字体枚举(如 document.fonts.check()FontFaceSet.check()):必须显式加载字体才能检测,且多数现代字体已预装;Safari 完全禁止 JS 查询系统字体
  • WebGL 指纹:gl.getParameter(gl.RENDERER) 等仍可用,但需创建上下文,开销大,且 Brave/FF 隐私模式会返回伪造值

如何避免被识别为自动化工具(关键坑点)

采集本身不触发风控,但行为模式会暴露风险:

php中级教程之ajax技术
php中级教程之ajax技术

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。《php中级教程之ajax技术》带你快速

下载

立即学习Java免费学习笔记(深入)”;

  • 不要在页面加载完成前立即采集:等 DOMContentLoaded 后延时 100ms+,模拟真实用户节奏
  • 避免高频重复调用 canvas/WebGL:单页生命周期内最多采集 1–2 次,否则可能被判定为扫描行为
  • 不要依赖 document.hidden 为 false 才采集:后台标签页也能正常运行 JS,反而显得异常
  • 禁用 fetchXMLHttpRequest 上报指纹:服务端应通过 RefererUser-Agent 关联请求,而非前端主动推送
  • 注意 localStorage 写入:某些风控 SDK 会监听 storage 变更,建议只读不写

简单指纹哈希示例(仅作理解,勿直接用于生产)

以下代码仅组合几个低干扰字段生成简易 hash,不包含 canvas/WebGL 等高风险操作:

function getBasicFingerprint() {
  const parts = [
    navigator.platform,
    screen.width + 'x' + screen.height,
    screen.colorDepth,
    Intl.DateTimeFormat().resolvedOptions().timeZone || '',
    navigator.hardwareConcurrency || 0,
    self.screen.availWidth + 'x' + self.screen.availHeight
  ];
  return btoa(parts.join('|')).substring(0, 16); // 简单 base64 截断,实际应使用 sha256
}

真正可用的指纹方案必须做特征加权、降噪(如过滤虚拟机共性值)、并定期校验各字段稳定性——这些远超单个 JS 函数能解决的范围。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

830

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

743

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1414

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

381

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

938

2025.04.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号