javascript - 更改浏览器中的导航器以假装已安装该插件(使用 javascript)

标签 javascript google-chrome-extension navigator

我正在尝试做 Chrome 扩展,它会假装安装了一些插件。我试图编辑 navigator.plugins,但这些属性是只读的。我可以添加新项目 navigator.plugins[x],但我不知道如何在 navigator.plugins 中创建新的(Plugin、PluginArray 或 MimeType)对象。

有可能吗?

最佳答案

下面是一种非常适合欺骗 PluginArray 的方法(注意 Object.setPrototypeOf):

(function generatePluginArray() {
  const pluginData = [
    { name: "Chrome PDF Plugin", filename: "internal-pdf-viewer", description: "Portable Document Format" },
    { name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai", description: "" },
    { name: "Native Client", filename: "internal-nacl-plugin", description: "" },
  ]
  const pluginArray = []
  pluginData.forEach(p => {
    function FakePlugin () { return p }
    const plugin = new FakePlugin()
    Object.setPrototypeOf(plugin, Plugin.prototype);
    pluginArray.push(plugin)
  })
  Object.setPrototypeOf(pluginArray, PluginArray.prototype);
  return pluginArray
})()

控制台输出:

enter image description here

我还没有添加 MimeType 属性,但应该可以通过类似的方式完成。

请随时提交 PR,以防您对此进行充实(我已经为 puppeteer 开发了一个插件,该插件正在实现各种检测规避技术): https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth

编辑:我有一些空闲时间并添加了代码以完全模拟 navigator.pluginsnavigator.mimeTypes here .它甚至模拟功能方法、实例类型和 .toString 属性,使它们看起来像原生的,类似于普通的 Google Chrome。

关于javascript - 更改浏览器中的导航器以假装已安装该插件(使用 javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427279/

相关文章:

javascript - 当用户在 Android 上取消 native 选择器时,navigator.share 不会解析或拒绝

javascript - 如何渲染组件以支持 React/Redux(正确的方法)?

javascript - 谷歌浏览器扩展 Canvas 图标

google-chrome-extension - 是否可以通过chrome扩展访问iframe的内容?

javascript - 我的响应式导航栏不工作

android - 如何为 Switch Navigator 设置后退按钮

javascript - 当新的 props 被传递时,React 子组件状态不会更新

javascript - 使用nodeJS添加数字时出现奇怪的错误

javascript - 当焦点/单击时选择 contenteditable div 中的所有文本

node.js - 我的 Chrome 扩展程序和服务器之间的身份验证策略