1. 什么是插件指纹
navigator.plugins API 暴露浏览器中所有当前安装并启用的插件列表。这包括 Adobe Flash Player(如果支持)、Java、QuickTime、PDF 阅读器以及音频/视频解码器等插件。
插件指纹最常用于:
- 了解浏览器中的软件多样性
- 与其他指纹特征如
userAgent、languages或battery进行交叉检查 - 识别浏览器自动化工具,无头环境通常会抑制或错误表示插件列表
- 检测插件版本中的异常,这些异常表明伪装或自动化工具
尽管大多数现代浏览器已弃用或沙箱化标准插件,但平台仍然查看插件信息来构建更可靠且独特的硬件-软件复合指纹。
2. 网站如何检测和使用插件指纹
插件指纹通常通过以下方式实现:
- 枚举已安装插件
通过执行如下代码:
Array.from(navigator.plugins).map(p => p.name)
Web 平台收集可用插件列表,通常按名称和支持的 MIME 类型索引。
MIME 类型映射 Flash 和旧插件暴露详细的 MIME 类型和文件格式能力,指纹脚本会检测这些:
pluginItem.length // 每个插件支持的 MIME 类型数量 pluginItem.item(index).type遗留插件签名 即使实际插件被禁用,一些网站仍使用旧 API 或查找存储或行为中的插件安装痕迹。
交叉检查检测 反欺诈系统将插件指纹与其他内容比较:
navigator.userAgentnavigator.language- 系统颜色和 JS/Canvas 行为
- 跨会话检测到的插件历史
如果发现不匹配——例如,同一会话 ID 出现新的插件列表——这可能被解释为篡改或多账户尝试。
重要提示:尽管大多数插件由于安全性和弃用原因不再活跃,但其存在和报告结构(PluginArray、MimeTypeArray)仍被高级反欺诈平台用于分析和分类。
3. FlashID 如何掩码插件指纹
FlashID 通过全面掩码 navigator.plugins 和 navigator.mimeTypes API 来实现指纹一致性的完全控制,从而避免账户关联。
FlashID 中的关键插件指纹伪装功能包括:
- 掩码/自定义插件列表
FlashID 修改
navigator.plugins的输出,以显示伪造的(但逼真)插件数组。您可以选择:
- 默认浏览器插件基线
- 基于动态配置文件的插件生成
- 静态自定义列表提供(
基于 JSON 的数组模板)
MIME 类型伪装 FlashID 完美操控每个插件显示为支持的 MIME 类型,确保伪造列表与选定的浏览器个性一致:
// FlashID 伪造的 mimeTypes 响应 navigator.mimeTypes['application/x-shockwave-flash'] = undefined;PluginItem 对象不一致性处理 Web 应用检测库通常调用插件子属性如
item.enabledPlugin。FlashID 模拟真实世界语义,包括:
- 根据浏览器上下文返回 null 或对象
- 每个项目的匹配 MIME 类型引用
- 插件
description和version能力模拟
跨配置文件隔离 每个 FlashID 浏览器实例都有自己的插件列表。与通用伪装器不同,后者在多个标签页中广播相同的伪造插件列表,FlashID 处理配置文件间区别,确保用户可以同时使用不同身份登录。
伪造插件枚举 在揭示插件数组时,FlashID 确保仅暴露与选定区域设置、OS 和浏览器版本相关的插件。这包括在 Chrome 70 上模拟标准的 Adobe 相关名称,以及在更现代配置文件中模拟更简洁的扩展式描述。
启发式防护 FlashID 引入有意变异(小型属性伪造或延迟访问)来规避机器人和检测逻辑,这些逻辑检查:
- 快速枚举模式(无头环境中典型)
- 始终默认或始终空的插件数组
- 与真实通用浏览器不一致的插件排序
4. 总结
尽管许多实际插件功能已过时,但其指纹影响在检测和分析逻辑中仍然强大。FlashID 通过 JS 对象拦截、基于配置文件的生成以及合理的熵插入,确保配置文件保持一致、上下文合适的插件伪造状态——同时不损害兼容性。
对于管理多个账户或匿名浏览器实例的团队,FlashID 的插件伪装允许在高级指纹分析下的安全行为分离和稳定性。
您可能还喜欢

