一个反常识: 在 Chrome 浏览器里如何拿到用户最真实的 CPU 和其他硬件信息(不走 UA

161 天前
 RiverRay

前端老鸟都知道一个常识

谷歌浏览器里面是拿不到真实 CPU 和硬件信息的

(:UA 那个很容易伪造好吧

今天再给你一个反常识:

其实,Chromium 内置了一个系统级插件。

这个插件允许 *.google.com 网站获取宿主机 CPU 信息

去 Chromium 源码里找找,发现插件 ID 是:nkeimhogjdpnpccoofpliimaahmaaome 。

而且,这个插件还能对外通信

so ,骚操作来了

我们可以随便打开一个 Google 的网站在 console 里面输入:

chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
{method: 'cpu.getInfo'},
response => console.table(response));

CPU 、进程还有负载 一五一十的就有了

看源代码,这个内置插件里面还暴露了不少其他方法,可以自己探索玩玩

说人话:

如果你做的是浏览器扩展,完全可以获取到宿主机的 CPU 还有其他硬件信息的

哈哈哈哈哈

24341 次点击
所在节点    Chrome
147 条回复
daidr
161 天前
@hez2010 runtime 暴露出去主要是可以给 what's new 或者扩展商店之类的页面用,比如检测扩展安装状态、在 what's new 里帮你改浏览器主题。
LingXingYue
161 天前
google.com 可以 google.com.hk 却不行
这是历史遗留代码?还是谷歌一直在偷偷用呢
kylix
161 天前
确实可以,google.com 首页 复现成功
Garphy
161 天前
有时候可能有点用···
zaizaizai2333
161 天前
Marius Karnauskas
@karnauskas

To report CPU/GPU load during Hangouts call - and probably adjust stream quality on the go.

Luca Casonato 🏳️‍🌈
@lcasdev

That’s not the point. The idea is good. The Google only implementation is not.

最后两句中文金句
drymonfidelia
161 天前
@satoru HN 上的源链接是昨天发的,OP 是今天的帖,明显是 OP 翻译别人的
SunOfHomeBoy
161 天前
chrome.runtime.sendMessage('nkeimhogjdpnpccoofpliimaahmaaome',
{method: 'cpu.getInfo'},
response => console.table(response));

亲测可行!
Akiya
161 天前
实测 Edge 在 Mac 上可以复现
piapia
161 天前
@0o0O0o0O0o zz 你咋啥都知道. tql
CloveAndCurrant
161 天前
opera 也可以复现成功
lixen9
161 天前
测试了下,获取的 cpu 信息不对,macos
lixen9
161 天前
@lixen9 搞错了.. 查询的是对的
pikko
161 天前
@nziu #63 extension 有额外权限能理解(暂且不说有没有控制硬件权限许可),而楼主说的这个,是不装插件,打开谷歌官网就能跳出来的 runtime 对象,妥妥的后门了。
google exlusive 后门
caqiko
161 天前
作为一个 Chrome Extension 开发者,我来解释一下:

1. Chromium 为浏览器扩展提供了很多 API ,其中包括 chrome.system.cpu 。这个 API 允许扩展访问 CPU 信息。
2. internal extensions:Google Chrome 自带了一些内部扩展( internal extensions ),如 Google Hangouts 和 PDF 预览功能等。这些扩展可以利用 Chrome 的各种 API 来实现其功能。
3. manifest.json:扩展的 manifest.json 文件是扩展的配置文件,其中定义了扩展的各种权限和行为。Google Hangouts 扩展在 manifest 中声明了相关的权限,以及在哪些页面(*.google.com )可以运行。这解释了为什么只有在*.google.com 页面可以获取。
4. background script:扩展的 background 脚本(如 trunk.js )是在后台运行的,可以持续监听和响应来自页面的消息。
5. message passing:扩展可以使用 chrome.runtime.sendMessage 和 chrome.runtime.onMessage 来实现消息传递。页面脚本 content-script 可以发送消息到 background script ,然后 background script 可以处理这些消息并返回响应。

综上所述,并不是只有 Google 有这个权限,所有的扩展都可以拿到这个功能。

9ki
161 天前
@caqiko 题都没读对就来教别人..
sloknyyz
161 天前
你说错了一点,没有进程信息,那是处理器核心负载信息。
mizuhokaga
161 天前
win11 edge 在 https://www.google.com/
复现成功, 不过我用 Firefox
pikko
161 天前
@caqiko #94 题主探讨的是访问谷歌网页就暴露一个 runtime 对象了,都不到安装插件那一步。且只有谷歌有。
也就是谷歌就能看你 cpu 来做数据收集,别的网站不行。
poorcai
161 天前
我已经在尝试着转向 firefox 了
asdjgfr
161 天前
厉害了,真能复现,看 chromium 源码应该是 11 年前加的,9 年前改成 google 白名单,在 62 版本就有了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1056113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX