mk668a/hide-my-extensions-from-sites

GitHub: mk668a/hide-my-extensions-from-sites

一款浏览器隐私扩展,通过拦截所有网站对扩展资源的探测请求来防止已安装扩展列表被枚举用于指纹追踪。

Stars: 0 | Forks: 0

# 对网站隐藏我的扩展程序 🛡️ **English ・ [日本語](docs/i18n/README.ja.md) ・ [简体中文](docs/i18n/README.zh-CN.md) ・ [한국어](docs/i18n/README.ko.md) ・ [Español](docs/i18n/README.es.md) ・ [Français](docs/i18n/README.fr.md)**

Sites fingerprint you by your extensions. Hide the whole list. Universal, local, free — the privacy uBlock for extension enumeration.

**对每一个试图扫描的网站隐藏你的扩展。** 网站可以静默读取*你安装了哪些浏览器扩展*。它们会逐一请求 `chrome-extension://{id}/{resource}` URL,并根据哪些请求有响应来**枚举**你已安装的扩展——这就是 LinkedIn 的“BrowserGate”事件所暴露的伎俩。这是一个强烈的指纹信号,可用于追踪、定向投放和审查。 `hide-my-extensions-from-sites` 可以**在所有网站上**阻断这种枚举,它不是针对单一网站的补丁,而是直接封锁了这项技术本身——堪称“隐私保护版的 uBlock”。 ## 😩 为什么要开发它 - **扩展即指纹。** 已安装的扩展集合是一个稳定的标识符,即使清除 cookie 也依然有效。 - **现有的防御手段太局限。** 像 browsergate-shield 这样的工具只能匹配 LinkedIn 的特定 ID。在 Chrome 中,对于其他使用相同技术的网站,目前**没有通用的**防御手段。 ## 🧱 工作原理 1. **在 MAIN world 中拦截 `chrome-extension://` 探针** —— 通过 content_script 拦截经由 `fetch` / `XHR` / DOM(`img`/`link` 标签) / Workers / 缓存发起的扩展 ID 探测。 2. **隐藏存在状态(被动防御)** —— 返回统一的“不存在”响应,使得已安装的扩展无法被读取。 3. **污染枚举结果(主动欺骗,可选模式)** —— 不仅仅是返回“不存在”,而是返回一个**虚假的扩展列表**来破坏扫描器的结果。如果说被动防御意味着“不泄露”,那么这就意味着“让他们吞下谎言”。 4. **查看运行效果** —— 当网站被捕获到正在进行扫描时,图标上会显示一个徽标(例如 `🛡 已拦截 12 次扫描`)以及实时日志。 | 被动防御 — 隐藏列表 | 欺骗模式 — 污染扫描 | |:---:|:---:| | ![显示当前标签页上被拦截的扩展探针的弹窗](https://raw.githubusercontent.com/mk668a/hide-my-extensions-from-sites/main/store/assets/screenshot-1-hero.png) | ![向扫描器提供虚假“已安装”结果的弹窗](https://raw.githubusercontent.com/mk668a/hide-my-extensions-from-sites/main/store/assets/screenshot-2-deception.png) | ## 🥊 对比 | | 范围 | 主动欺骗 | |---|---|---| | browsergate-shield | 仅限 LinkedIn | 否 | | TrackPrivacy | 通用 | 否 | | **hide-my-extensions-from-sites** | **通用(所有网站)** | **是(可选模式)** | ## 🔒 范围 - **无账号、无服务器、无云端。** 所有操作都在你的浏览器中本地运行——确定性强、离线可用、完全免费。 - **受信任扩展的白名单。** 有些扩展会合法地为页面提供资源;在弹窗中添加它们的 ID,它们的请求就会畅通无阻。 - 目标平台:**Chrome / Chromium** (111+) 和 **Firefox** (140+),Manifest V3。 ## 🎯 威胁模型与覆盖范围 攻击者是一个试图通过请求 `chrome-extension://{id}/{resource}`(或 `moz-extension://…`)URL 并观察哪些请求能成功解析,从而了解你 安装了哪些扩展的**网页**。我们在 `document_start`、 任何页面脚本运行之前,运行于页面的 MAIN world 中, 并中和页面可用于发起或观察此类探针的每一个请求通道。 **被拦截的探针向量**(每一个都包含回归测试): | 通道 | 如何被中和 | |---|---| | `fetch()` | 扩展 URL 探针被拒绝(或在欺骗模式下被伪造) | | `XMLHttpRequest` | 发往扩展 URL 的 `open()` 被重定向至无效 URL | | `` / `