petritbahtiri123/LeakGuard

GitHub: petritbahtiri123/LeakGuard

LeakGuard 是一款本地优先的浏览器扩展,在用户向 AI 聊天工具提交提示词或上传文件之前,自动检测并脱敏其中的密钥、令牌、邮箱和公有 IP 等敏感数据。

Stars: 5 | Forks: 0

# LeakGuard LeakGuard 是一款本地优先的浏览器隐私卫士,旨在减少意外的 AI 提示词泄露。 公开的产品名称为 LeakGuard。 它会在提交前监视受支持的编辑器中输入或粘贴的内容,检测可能的密钥、电子邮件地址和敏感的公有 IPv4 数据,并允许您选择 `Redact`(脱敏)或 `Allow once`(仅允许一次)。 LeakGuard 不使用后端服务、云端处理、遥测或远程模型调用。它旨在进行实际的风险降低,而非实现完美的隐私或完整的企业级 DLP。 ## LeakGuard 是什么 - 一款用于受支持 AI 聊天编辑器的、本地优先的浏览器隐私卫士 - 一层以确定性检测优先的脱敏层,用于处理可能的密钥、电子邮件地址和敏感的公有 IPv4 数据 - 一个会话范围的占位符系统,用于将原始值替换为诸如 `[PWM_1]`、`[PUB_HOST_1]` 和 `[NET_1]` 之类的 token - 一个用于选定文本文件的本地文本文件扫描器 - 针对受保护的 AI 编辑器中受支持的 UTF-8 文本文件,提供本地文本文件的粘贴/拖拽脱敏功能 - 针对受保护的 AI 编辑器中较大且受支持的文本文件上传,提供流式本地脱敏功能 - 在确定性检测之后,针对剩余的可疑候选窗口,提供可选的本地 AI 辅助层 ## LeakGuard 不是什么 - 完整的企业级 DLP,也无法保证阻止所有敏感数据的泄露 - 不进行远程密钥验证、凭证轮换,也不是密钥管理器 - 不进行仓库历史扫描、CI 推送保护,也不能替代诸如 GitHub Secret Scanning、Gitleaks、detect-secrets 或 TruffleHog 等工具 - 不提供云端 AI 扫描、远程模型推理、遥测或后端密钥处理 - 不提供保留布局的 PDF/DOCX/XLSX 脱敏、遗留/宏 Office 脱敏、扫描版 PDF OCR、非英语 OCR、远程 OCR、屏幕截图监控、剪贴板历史、恶意软件或端点保护 请参阅 [docs/NON_GOALS.md](docs/NON_GOALS.md) 以获取维护中的非目标列表。 ## v1.7.0 概览 - 内置对 `chatgpt.com`、`chat.openai.com`、`claude.ai`、`gemini.google.com`、`grok.com` 和 `x.com` 的保护 - 用户可自行管理对其他确切 `http://` 或 `https://` 源的保护 - 仅在浏览器中进行本地检测与脱敏 - 在受保护的 AI 编辑器中粘贴、拖拽或选中的受支持本地 UTF-8 文本文件,只要浏览器/网站交接顺利,即可在本地进行验证、脱敏,并替换为已清理的内存中文件 - 对于超过 4 MiB 且最大为 50 MB 的受支持大型文本文件上传,在清理交接之前会使用流式/分块本地脱敏 - 超过 50 MB 的受支持文本文件将被直接阻止上传,以防止原始数据泄露 - 能够成为生成的 `Plain Text` 附件的 ChatGPT 大型粘贴流程,会在清理后的文本/文件交接之前被拦截并进行脱敏处理 - Gemini 和 Grok 的大型文件交接使用受信任的待处理附件提示,因此仅清理后的文件会被暂存以上传 - LeakGuard 会在切换至待处理附件提示之前,显示本地扫描、清理、流式脱敏和已清理上传准备的进度 - Gemini 的文件转文本回退机制使用具备大小感知的插入方式,可在 Firefox 中保留多行已清理文本,避免了中等长度文本的缓慢 `execCommand` 路径,并会在将极大的已清理文本插入编辑器之前询问用户 - 编辑器重写验证在受支持的 contenteditable 编辑器中实现了标准化,同时如果仍然存在原始的高可信度密钥或缺失占位符,依然会执行安全阻断(失败即闭合) - 可选的本地 AI 辅助在 Chrome 和 Firefox 中会从打包的扩展 URL 加载其 ONNX Runtime 辅助程序 - 如果清理后的文件交接失败,或者文件不受支持/无效,LeakGuard 将阻止原始上传并显示本地消息 - 具备信任感知的占位符保留和重用机制,适用于会话已知的 `[PWM_N]`、`[NET_N]` 和 `[PUB_HOST_N]` token - 对敏感 HTTP 标头(如 `Authorization`、`X-API-Key`、auth token 标头、`Cookie` 和 `Set-Cookie`)的完整值进行脱敏 - 在受保护的提示词和受支持的文本文件中,对可能的电子邮件地址进行仅限本地的脱敏 - 对常见的文档占位符、示例值和开发变量名进行误报抑制 - 本地文件扫描器支持基于文本的文件,并可导出脱敏副本和清理后的报告 - 支持对文本 PDF、DOCX 文档和 XLSX 电子表格进行本地文本提取,提供 `.redacted.txt` 回退机制,并在支持的情况下从清理后的文本重新生成 PDF/DOCX/XLSX 输出 - 对 PNG、JPG、JPEG 和 WEBP 图像进行本地图像元数据扫描 - 扫描器图像 OCR 支持 PNG、JPG、JPEG 和 WEBP 图像,提供仅限英语的本地 OCR,并在 OCR 框符合条件时导出扁平化的 `.redacted.png` 视觉脱敏结果 - 受保护站点的图像 OCR 为可选功能,默认关闭,仅在本地运行,仅适用于图像,并且仅当 OCR 框符合条件时才上传 `.redacted.png` - 基于弹窗的站点管理,支持添加、启用、禁用和移除流程 - 在受保护页面上显示页面内顶部居中的状态菜单 - 仅通过弹窗安全显示占位符的真实内容 - 在 `chrome.storage.session` 中存储会话范围的占位符状态,或在会话存储不可用时使用临时的扩展内存 - 无云端处理、遥测或后端服务 ## LeakGuard 的工作原理 1. 在受保护的站点上,LeakGuard 会监视受支持的聊天编辑器,监控粘贴、输入、发送以及受支持的本地文本文件粘贴/拖拽/文件选择事件。 2. 如果发现可能的密钥或敏感的公有 IPv4 主机/CIDR,它会显示一个 `Allow once`(仅允许一次)或 `Redact`(脱敏)的决策流程。 3. 如果您选择 `Redact`,它将使用诸如 `[PWM_1]`、`[PUB_HOST_1]` 和 `[NET_1]` 的稳定占位符重写编辑器内容。 4. 私有的“原始值-占位符”映射仅保留在后台 service worker 和 `chrome.storage.session` 中,且仅在当前活动的浏览器会话中有效;在没有会话存储的浏览器上,LeakGuard 会使用临时的扩展内存代替 `storage.local`。 5. 点击可显示的占位符会在 LeakGuard 弹窗内暂存一个安全展示过程。原始值不会被写回到页面 DOM 中。 ## 本地文件扫描器 LeakGuard 包含一个扩展自有的文件扫描器页面,用于处理本地文件。它仅会在您选中文件后读取它们,使用与提示词相同的确定性检测器在浏览器中扫描受支持的内容,并可导出脱敏的文本副本、清理后的 JSON 发现报告,或针对扫描器图像视觉脱敏导出符合条件且扁平化后的已脱敏 PNG。 此版本受支持的扫描器文件包括:`.txt`、`.md`、`.markdown`、`.env`、`.log`、`.json`、`.yaml`、`.yml`、`.toml`、`.xml`、`.csv`、`.ini`、`.conf`、`.cfg`、`.pem`、`.key`、`.ps1`、`.sh`、`.bash`、`.zsh`、`.bat`、`.cmd`、`.py`、`.js`、`.jsx`、`.ts`、`.tsx`、`.html`、`.css`、`.scss`、`.java`、`.c`、`.cpp`、`.h`、`.hpp`、`.cs`、`.go`、`.rs`、`.rb`、`.php`、`.sql`、`Dockerfile`、`Makefile`、文本 PDF、DOCX 文本、XLSX 文本,以及 PNG/JPG/JPEG/WEBP 图像元数据。扫描器图像 OCR 仅限英语、仅限本地,且仅限于 PNG/JPG/JPEG/WEBP 图像。 在 v1.7.0 中,粘贴、拖拽或选中的受支持的本地 UTF-8 文本文件、文本 PDF、DOCX 文档、XLSX 电子表格和图像元数据,只要浏览器和站点的上传流程支持合成的文件交接,也可以在本地进行验证,通过相同的后台占位符流程进行脱敏,并替换为清理后的内存中 `File`/`Blob` 对象。扫描器的文本 PDF 可以导出 `.redacted.txt` 以及基于清理后提取文本重新生成的 `.redacted.pdf`;扫描器的 DOCX 文件可以导出 `.redacted.txt` 以及基于清理后提取文本重新生成的 `.redacted.docx`,但不保留原始样式、图像、注释或元数据;扫描器的 XLSX 文件可以导出 `.redacted.txt` 以及基于清理后提取文本简单重新生成的 `.redacted.xlsx`,但不保留公式、图表、样式、注释、隐藏工作表、元数据、自定义 XML、计算链或媒体。受保护站点的文本 PDF、DOCX 文件和 XLSX 文件仅在清理后重新生成完成后,才能交接重新生成的 `.redacted.pdf`、`.redacted.docx` 或 `.redacted.xlsx` 输出;被截断或不安全的重新生成将回退到 `.redacted.txt` 或直接阻止原始上传。图像元数据和受保护站点的 OCR 文本输出将导出为 `.redacted.txt`。受保护站点的图像 OCR 是可选的且默认关闭;启用后,符合条件且视觉脱敏安全的图像仅会在 OCR 框足够安全时才上传扁平化的 `.redacted.png`。大于 4 MiB 且最大为 50 MB 的文件会使用流式/分块本地脱敏,因此 LeakGuard 不需要在清理之前将完整的原始文件读取为一个完整的字符串。当站点需要用户触发的上传流程时,Gemini 和 Grok 可以在受信任的待处理附件提示中暂存清理后的大型文件。这并不保证支持所有的编辑器或上传控件。不受支持的文件、无效的 UTF-8 文件、大于 50 MB 的文本文件、无法读取的文档、OCR 失败以及清理后的文件交接失败,都将被阻止进行原始上传并显示本地消息。 文件扫描器的限制: - 本地扫描器验证和受保护编辑器上传路径支持的最大文本文件大小为 50 MB - 对于超过 4 MiB 且最大为 50 MB 的受保护编辑器上传路径,使用流式/分块脱敏 - 单文件扫描 - 仅限确定性检测 - 原始文件内容不会存储在扩展存储中 - 默认情况下,导出的 JSON 报告不包含原始密钥 - 扫描器和受保护站点的文本 PDF、DOCX 和 XLSX 只能从清理后的文本导出重新生成的 `.redacted.pdf`、`.redacted.docx` 和 `.redacted.xlsx`;当重新生成会导致截断时,受保护站点的输出将回退至 `.redacted.txt` - 暂不支持扫描版 PDF OCR、非英语 OCR、远程 OCR/后端或图像格式保留 ## 检测范围 LeakGuard 目前专注于高价值的提示词泄露场景,例如: - API 密钥、访问令牌、PAT、OAuth 风格的令牌、Bearer 令牌和 JWT - 密码、客户端密钥、Cookie/session 风格的值以及通用密钥分配 - Webhook URL、Docker auth blob、云连接字符串和 auth 标头 - 数据库 URL 和连接字符串,同时保留 URI 形状并仅屏蔽其中的密钥部分 - 敏感的 HTTP 标头,同时尽可能保留标头名称、分隔符、auth 方案和 Cookie 属性 - 针对标头、赋值和带标签的普通文本中重复出现的原始密钥,进行稳定的占位符重用 - 可能的电子邮件地址,在本地进行脱敏,无需云端处理或远程模型调用 - 公有 IPv4 主机和公有 IPv4 CIDR 范围 该检测器在设计上属于启发式检测。它经过调优以捕获现实中的错误,同时尽可能抑制明显的文档占位符、示例字面量、安全的开发变量名和其他低风险文本。 ### 本地 AI 辅助 LeakGuard 可以选择在确定性检测之后,针对剩余的可疑候选窗口运行一个微型的本地 ONNX 分类器。确定性检测仍然具有绝对权威性:AI 辅助不会接收完整的提示词,不能降级确定性检测结果,也不能替代确定性脱路径。 有关训练、导出、浏览器冒烟测试和企业禁用指南,请参阅 [docs/AI_ASSIST.md](docs/AI_ASSIST.md)。 ## 安全模型 - 扩展程序不会将原始密钥发送到外部服务。 - 原始密钥不会持久化存储在 `chrome.storage.local` 中。 - 选定的文件内容在本地进行扫描,且不存储在扩展存储中。 - 受支持的本地文本文件粘贴/拖拽/文件选择内容会在原始上传之前在本地被拦截,并且不会存储在扩展存储中。 - 大型受支持的文本文件在清理后交接之前会在本地进行流式/分块脱敏;通过受保护的文本文件路径,LeakGuard 不会上传原始的大型文本。 - 持久化的本地存储仅限于规范化后的受保护站点规则。 - 原始值仅保留在会话范围的后台存储中,以便在当前活跃的标签页会话期间进行安全展示。 - 安全展示仅限于扩展自有的 UI。 - 扩展页面使用严格的 CSP,并打包了脚本和本地 WASM 支持:`script-src 'self' 'wasm-unsafe-eval'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'`。 - 如果扩展程序无法安全地验证重写后的编辑器内容,它将阻止提交。 更多详细信息请参阅 [SECURITY_REVIEW.md](SECURITY_REVIEW.md)。 ## 受支持的站点 ### 内置受保护站点 - `https://chatgpt.com/*` - `https://chat.openai.com/*` - `https://claude.ai/*` - `https://gemini.google.com/*` - `https://grok.com/*` - `https://x.com/*` ### 用户管理的受保护站点 - 通过弹窗中的 `Protect This Site` 或 `Manage Protected Sites` 进行添加 - 存储为规范化后的确切源,例如 `https://app.example.com/*` - 路径、查询字符串、片段、通配符规则和带有凭证的 URL 将被拒绝 - 仅当用户明确为该站点启用保护时,才会请求主机访问权限 ## 扩展 UI ### 弹窗 弹窗是主要的控制界面。 - 主视图显示当前标签页、保护状态和 `Protect This Site` - 受保护站点视图允许您直接在弹窗中添加、启用、禁用和移除额外的站点 - 文件扫描器可打开一个扩展自有的页面,用于本地文本文件扫描和脱敏导出 - 安全展示视图仅在扩展弹窗内部显示已知占位符的原始值 ### 页面内 UI 受保护站点还会显示一个紧凑的顶部居中的状态菜单。 - 确认保护已激活 - 显示通用的敏感项和占位符计数 - 链接到扩展控制选项 - 绝不会将原始密钥值渲染到宿主页面中 ## 构建与加载 1. 克隆此代码库。 2. 确保 Node.js/npm 和 Python 3 在您的 PATH 中可用。 3. 构建每个浏览器目标: ``` npm run build ``` `npm run build` 是 `npm run build:all` 的别名。它会安装缺失的 npm 包,创建 `ai/.venv`,安装 Python 训练依赖项,生成本地 AI 数据集,在过期时训练/导出本地模型,并将所有解压后的扩展构建写入 `dist/` 目录下。 如需仅构建一个目标: ``` npm run build:chrome npm run build:chrome-enterprise npm run build:firefox npm run build:firefox-enterprise ``` ### Chrome 1. 打开 `chrome://extensions`。 2. 启用 `Developer mode`。 3. 点击 `Load unpacked`。 4. 选择 `dist/chrome/` 用于消费者版本构建,或选择 `dist/chrome-enterprise/` 用于企业版本构建。 ### Firefox 1. 打开 `about:debugging#/runtime/this-firefox`。 2. 点击 `Load Temporary Add-on...`。 3. 选择 `dist/firefox/manifest.json` 用于消费者版本构建,或选择 `dist/firefox-enterprise/manifest.json` 用于企业版本构建。 打开一个内置的受保护站点或您想从弹窗中添加的任何普通网站,然后点击 LeakGuard 工具栏图标,验证弹窗是否能正确渲染以及当前站点状态是否正确加载。 详细的安装和首次冒烟测试步骤请参阅 [docs/INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)。 ## 企业部署 LeakGuard 的企业运行时现在可以: - 在实际的提交、粘贴和输入内容路径中强制执行目标操作,支持遗留的 `approvedDestinations` / `blockedDestinations`,并通过显式的 `destinationPolicies` 支持 `allow`、`redact` 和 `block` - 支持 `managedProtectedSites`,以便企业策略可以在没有用户创建站点规则的情况下,为 LeakGuard 标记额外的受保护源 - 通过 `allowUserOverride` 禁用 `Allow once` - 通过 `allowSiteRemoval` 限制用户移除站点 - 当内容被阻止或脱敏时,存储有限且仅包含元数据的审计事件 要实现强制安装、严格防止被移除、无痕模式或 InPrivate 处理以及开发者模式限制,仍然需要使用浏览器管理的部署方式。有关此代码库目前所期望的确切 Chrome 和 Edge 策略指南,请参阅 [docs/ENTERPRISE_DEPLOYMENT.md](docs/ENTERPRISE_DEPLOYMENT.md)。 ## 测试 ### 自动化 运行完整的回归测试套件: ``` npm test ``` 这涵盖了检测器加固、网络转换、编辑器辅助程序、输入拦截、受保护站点管理、产品化检查和安全回归测试。 浏览器构建输出可通过以下命令创建: ``` npm run build ``` 也可以使用单独的浏览器目标: ``` npm run build:chrome npm run build:chrome-enterprise npm run build:firefox npm run build:firefox-enterprise ``` ### 手动 使用以下文件进行浏览器端验证: - [tests/manual_detection_paste_block.txt](tests/manual_detection_paste_block.txt) - [docs/RELEASE_QA_CHECKLIST.md](docs/RELEASE_QA_CHECKLIST.md) - [sandbox/composer-harness.html](sandbox/composer-harness.html) 手动冒烟测试块包含合成的密钥、密码、令牌、连接字符串、公有 IP 和安全的字面量,因此您只需粘贴一个块即可验证端到端的检测效果。 ## 代码库结构 - `src/background/service_worker.js` 会话状态、受保护站点编排、安全展示路由和动态 content-script 同步 - `src/content/content.js` 编辑器集成、决策流程、重写验证、占位符点击暂存和页面内状态面板 - `src/content/composer_helpers.js` 共享的 textarea 和 contenteditable 插入辅助程序 - `src/shared/*` 检测器、脱敏、占位符、公有 IPv4 分类、转换逻辑和站点规范化 - `src/popup/*` 弹窗主页、受保护站点管理和安全展示 UI - `src/options/*` 次要的扩展托管设置界面 - `src/compat/*` 用于 `browser` / `chrome`、storage-session 回退和平台能力检查的轻量级浏览器兼容性辅助程序 - `manifests/*` 用于生成浏览器构建的基础、浏览器和企业清单叠加层 - `scripts/build-extension.mjs` 将共享源代码复制到每个目标 dist 文件夹中,生成构建元数据,并写入合并后的清单 - `dist/chrome`、`dist/chrome-enterprise`、`dist/firefox`、`dist/firefox-enterprise` 为消费者和企业目标生成的解压扩展构建 - `tests/*` 基于 Node 的回归测试覆盖 ## 发布就绪 - [docs/CHROME_WEB_STORE_LISTING.md](docs/CHROME_WEB_STORE_LISTING.md) - [docs/PRIVACY_POLICY.md](docs/PRIVACY_POLICY.md) - [docs/RELEASE_QA_CHECKLIST.md](docs/RELEASE_QA_CHECKLIST.md) - [tests/manual_detection_paste_block.txt](tests/manual_detection_paste_block.txt) ## 文档 请从 [docs/README.md](docs/README.md) 开始查看完整的文档索引。当前的文档清单、清理状态和未来路线图位于 [docs/DOCUMENTATION_ROADMAP.md](docs/DOCUMENTATION_ROADMAP.md) 中。 常见入口点: - [docs/INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md) - [docs/PROTECTED_SITES_GUIDE.md](docs/PROTECTED_SITES_GUIDE.md) - [docs/PLACEHOLDERS_AND_REVEAL.md](docs/PLACEHOLDERS_AND_REVEAL.md) - [docs/FILE_UPLOAD_SCANNING_GUIDE.md](docs/FILE_UPLOAD_SCANNING_GUIDE.md) - [docs/PRIVACY_POLICY.md](docs/PRIVACY_POLICY.md) - [SECURITY_REVIEW.md](SECURITY_REVIEW.md) - [docs/BROWSER_COMPATIBILITY_MATRIX.md](docs/BROWSER_COMPATIBILITY_MATRIX.md) - [docs/ENTERPRISE_DEPLOYMENT.md](docs/ENTERPRISE_DEPLOYMENT.md) - [docs/MANAGED_POLICY_SCHEMA.md](docs/MANAGED_POLICY_SCHEMA.md) - [docs/AI_ASSIST.md](docs/AI_ASSIST.md) - [docs/RELEASE_QA_CHECKLIST.md](docs/RELEASE_QA_CHECKLIST.md) - [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) ## 非目标 LeakGuard 的非目标列表维护在 [docs/NON_GOALS.md](docs/NON_GOALS.md) 中。
标签:AI辅助, 对抗攻击, 敏感信息检测, 数据可视化, 数据脱敏, 本地优先, 网络安全, 自定义脚本, 隐私保护