slicedearth/controlcurrent

GitHub: slicedearth/controlcurrent

ControlCurrent 将浏览器安全控制映射到 MDN 兼容性数据,帮助团队规划跨浏览器的安全功能部署策略。

Stars: 1 | Forks: 0

ControlCurrent

打开在线应用 · 方法论 · 局限性

CI status CodeQL status GitHub Pages deployment status

今天您可以安全地部署哪些浏览器安全控制?

ControlCurrent 是一个专注于安全的浏览器兼容性和部署规划应用程序。它将精心整理的防御性浏览器控制目录映射到 MDN Browser Compatibility Data (BCD) 中的确切路径,保留支持限定条件,并完全在浏览器内评估明确的浏览器最低版本要求。它不是一个通用的兼容性索引。该静态网站不扫描目标;可选的 CLI 收集器仅用于按照清单进行明确的、经授权的收集,并存入私有本地存储。 ## 公开部署 [ControlCurrent 可在 GitHub Pages 上获取](https://slicedearth.github.io/controlcurrent/)。 该部署是静态的,不需要账户。浏览器策略选择、header 证据、范围清单和导出的报告都保留在访问者的设备上。 推送到或合并到 `main` 的更改只有在完整的 CI 工作流成功后才会自动部署。Pages 工作流会发布经 CI 验证的确切 commit。Source-review 和 Dependabot 工作流可以识别或提议更新,但它们自身无法合并或发布更改。 生成的 artifact 包含一个可移植的 `_headers` 策略,适用于支持 header 的静态主机。GitHub Pages 不会应用该文件,因此实时站点目前依赖于其严格的 meta CSP 和框架保护。在处理特定于组织的证据或更换主机之前,请参阅[部署安全](docs/deployment-security.md)。 ## 它提供什么 - 包含 30 个浏览器安全和隐私控制的版本化目录 - 精确的 BCD 路径映射和明确的不支持映射 - 显式标准化的九个桌面和移动浏览器系列 - 精确的 WebDX 功能关联和 Baseline 采用背景 - 固定到已审查源代码版本的精确 Web Platform Tests 套件映射 - 保留部分支持、flags、prefixes、替代名称、说明、移除和未知的源值 - 没有浏览器检测或遥测的本地部署配置文件规划器 - 用于选定控制和浏览器的反向最低 Baseline 计算器 - 本地配置文件导入、语义比较和确定性工程报告 - 带有过期、可见例外的版本控制策略配置文件 - 用于策略检查、解释和最低 Baseline 计算的本地 CLI - 用于将受限的公开、未经身份验证的同源证据捕获到私有本地存储的显式授权 CLI 收集器 - 具有编辑处理后证据且无 URL fetch 的离线 response-header 检查器 - 用于路由变体、CSP 与 markup 的关联、本地 SRI 字节验证、Fetch Metadata 请求上下文和简化的 WebAuthn 配置的受限证据包 - 不保留 URL 的受限 response-variant、status、redirect、content、cache、authentication 和 transport-error 上下文 - 可选的隐私最小化范围清单,可将多达 256 个不透明条目简化为语义指纹、计数、来源和完整性状态 - 完全绑定到清单所含条目的预期 surface 清单,区分缺失证据与明确排除的范围,并声明哪些控制和组合适用于每个评估的 surface - 包含在确定性 SHA-256 指纹内的具有应用、环境、revision、build、生产者和捕获窗口上下文的主体识别简化报告 - 具有显式模型兼容性、regressions、resolutions、其他更改和无法比较证据的细节感知简化报告比较 - 独立的证据策略配置文件和 CI 退出代码,包含身份、范围清单指纹、完整性、生产者、捕获持续时间、新鲜度和过期例外要求 - 可选的仅限 CLI 的 Sigstore 证明验证,它将确切证书身份绑定到简化报告指纹和部署身份 - 项目编写的组合检查,将候选部署方案与浏览器支持和生产保证分开 - 当前渠道的兼容性矩阵和浏览器发布视图 - 确定性的选定源代码快照、变更事件和源代码历史记录 - 由完整 CI 工作流控制的公共静态 GitHub Pages 部署 - 原始部署指南、回退方案和局限性 兼容性并不等同于配置保证。一个受支持的功能仍然可能配置不正确、存在实现缺陷,或者不足以满足应用程序的威胁模型。可选的离线评估可以确定提供的快照中是否存在已识别的策略语法或简化的配置证据,但它不证明其在整个应用程序中的有效性。 ## 数据源 当前版本使用 `@mdn/browser-compat-data` 8.0.7 和 `web-features` 3.34.1。选定的快照仅包含当前目录所需的 36 个 BCD 路径、九个浏览器系列的受限发布元数据,以及为这些路径声明的确切 Baseline 关联。 Conformance-evidence 注册表将 28 个控制映射到 revision 为 `af38980d2fcd74af19a226f5f651051cc15940ed` 的确切 Web Platform Tests 套件路径。 HSTS 和 HttpOnly 仍然明确未映射。ControlCurrent 链接到当前的 wpt.fyi 结果,但不摄取或简化通过率。 MDN Browser Compatibility Data 在 [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) 下发布。Web Platform Features 在 [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) 下发布。ControlCurrent 源代码根据 MIT 单独授权。请参阅 [NOTICE](NOTICE) 和[法律与许可](docs/legal-and-licensing.md)。 部署的站点包含一份纯文本的第三方声明,其中包含 Apache License 2.0 的条款以及浏览器打包依赖项的通知。 ## 隐私边界 部署的站点具有: - 没有账户或身份验证; - 没有分析、广告或跟踪; - 没有浏览器指纹识别或 user-agent 检测; - 没有运行时 API 或应用程序数据库; - 没有网站扫描; - 在离线 header 检查器中没有 URL fetch; - 在证据包分析中没有 HTML 执行或资源加载; - 没有自动的配置文件持久化。 提供的范围清单会在内存中缩减。公开报告保留其类型、完整性、生成时间、计数和语义指纹,但不保留不透明的清单条目或排除原因。 只有在访问者选择 **本地保存** 后,配置文件才会保存到一个受限的、版本化的 `localStorage` key 中。JSON 导出在浏览器中生成。 ## 本地开发 要求: - Node.js 24.15 或更高版本的受支持发布 - npm 11.17 或 12 安装并验证: ``` npm ci npm run verify ``` 启动本地站点: ``` npm run dev ``` 普通的测试和构建路径不会访问实时服务。 ## 更新源数据 源数据更新是经过深思熟虑的: 1. 审查新的 BCD 或 Web Platform Features 发布、schema 更改、许可证和选定的映射。 2. 更新 `package.json` 中的确切包版本。 3. 使用仓库的 npm 版本运行 `npm install`。 4. 运行 `npm run generate`。 5. 检查 `data/selected-bcd.json` 和 `data/change-events.json`。 6. 检查附加的 `data/source-history.json` 条目。 7. 运行完整的验证套件。 每周的 source-review 工作流是只读的。它报告锁定的源包何时落后于 npm 注册表元数据,并且不会编辑文件、打开 issue、commit、push 或部署。 合并或推送到 `main` 的经过审查的更改只有在 CI 成功后才会自动部署,并使用该 CI 运行检查的确切 commit SHA。Dependabot 和 source-review 结果自身不会合并或发布更改。 当锁定的包和提交的选定快照不同时,`npm run generate:check` 会失败。缺失的已配置路径会导致生成失败,而不是静默地变为受支持。 ## 命令 | 命令 | 用途 | | -------------------------- | ------------------------------------------------------------------- | | `npm run generate` | 重新生成选定的 BCD 子集并附加确定性的更改 | | `npm run generate:check` | 验证选定的子集是否与锁定的包匹配 | | `npm run lint` | 运行严格的 ESLint 检查 | | `npm run format:check` | 验证仓库格式化 | | `npm run typecheck` | 对源代码、工具和测试进行类型检查 | | `npm run check` | 运行 Astro 诊断 | | `npm run cli -- ...` | 评估策略、检查证据并比较简化报告 | | `npm test` | 运行带有覆盖率的 fixture 驱动的单元测试 | | `npm run build` | 验证源代码快照并构建静态站点 | | `npm run audit:repository` | 拒绝意外的公开数据和本地证据导出 | | `npm run audit:public` | 检查公开构建的边界和违禁内容 | | `npm run audit:language` | 强制执行 ControlCurrent 命名和澳大利亚英语术语 | | `npm run test:e2e` | 运行本地浏览器和可访问性测试 | | `npm run verify` | 运行非浏览器验证套件 | 验证管道会审核跟踪的发布路径和生成的 Pages artifact。它还确认部署的第三方通知仍然存在。 检查已编辑处理的本地 header 快照: ``` npm run cli -- inspect-headers examples/headers.example.json --json ``` 对于无效或模棱两可的 header 证据,该命令以非零状态退出。当策略门控对于在该单个响应中未观察到的控制也应该失败时,请添加 `--fail-missing`。 检查受限的 multi-surface 证据包: ``` npm run cli -- inspect-bundle examples/evidence-bundle.example.json --json ``` 将授权的公开目标收集到被忽略的私有存储中: ``` npm run cli -- collect-evidence private-data/collector/manifest.json \ --output private-data/collector/evidence.json \ --confirm-authorised-target ``` 收集器是固定来源的,在显式回环测试之外仅支持 HTTPS,不执行 JavaScript 或携带身份验证,并且从不会将目标路径或来源写入为专用的 bundle 元数据。捕获的 header 和 HTML 仍然可能包含位置信息,必须保持私密。请参阅 [`docs/authorised-collection.md`](docs/authorised-collection.md)。 缩减独立生成的不透明范围清单,并获取用于证据策略的确切指纹: ``` npm run cli -- reduce-scope-inventory examples/scope-inventory.json --json ``` 比较两个导出的简化报告,并且仅针对分类的 regressions 失败: ``` npm run cli -- compare-reports before.json after.json --fail-regression --json ``` 根据独立维护的证据策略评估导出的报告: ``` npm run cli -- check-evidence examples/evidence-policy.json report.json \ --as-of 2026-07-23 --strict-review ``` 为外部签名创建规范的 in-toto 声明: ``` npm --silent run cli -- create-attestation-statement report.json > statement.json ``` 验证外部签名的 Sigstore DSSE bundle,然后应用证据策略: ``` npm run cli -- verify-evidence examples/evidence-policy.json report.json \ report.sigstore.json --as-of 2026-07-23 --strict-review ``` 对于无效或不一致的证据,bundle 命令以非零状态退出。添加 `--fail-missing` 以包含缺失的控制,或者添加 `--strict-composites` 以要求每个适用的项目编写组合候选避免 review 或 gap 状态。超出每个声明 surface 策略的控制为 `not_applicable`,而不是失败。证据策略要求来自单独的文件,因此削弱提交的 bundle 不能削弱 CI 门控。示例门控还需要预期的清单指纹、完整的范围、应用程序、环境、revision、CI 生产者、build ID、捕获持续时间以及最大清单和证据年龄。这些是指纹化的生产者声明,除非单独的证明验证器接受签名声明和确切的策略选定签名者,否则不是经过身份验证的来源。带有签名的完整清单仍然不能证明其来源发现了每个生产路由或状态。 ## 架构 ``` Locked BCD and Web Platform Features packages | v exact selected-path resolver | v validated compatibility and Baseline subset | | pinned WPT revision v v | versioned catalogue change events v | evidence registry +----------------------------+---------------------+ | v browser-policy evaluation | v static Astro site opaque scope inventory plus local response, HTML, request, resource, and WebAuthn inputs | v non-executing bounded evidence reduction | v inventory fingerprint plus surface-scoped findings and composite candidates | v subject-identified, provenance-stamped reduced report | +--> compatible detail-aware comparison | +--> independent evidence-policy gate | +--> canonical in-toto statement | v external DSSE signing | v CLI-only Sigstore verification ``` 选定的数据是构建输入。部署的站点不会为兼容性数据发出运行时请求。 ## 文档 - [架构](docs/architecture.md) - [数据契约](docs/data-contract.md) - [Policy as code](docs/policy-as-code.md) - [范围清单](docs/scope-inventory.md) - [认证证据](docs/attested-evidence.md) - [一致性证据](docs/conformance-evidence.md) - [方法论](docs/methodology.md) - [威胁模型](docs/threat-model.md) - [部署安全](docs/deployment-security.md) - [依赖策略](docs/dependency-policy.md) - [法律与许可](docs/legal-and-licensing.md) - [工程案例研究](docs/engineering-case-study.md) - [安全策略](SECURITY.md) - [隐私策略](PRIVACY.md) ## 勘误 目录映射、计算、可访问性问题和源代码解释可以通过仓库的 issue 跟踪器报告。报告应指明控制、浏览器 Baseline、BCD 版本和路径、预期结果以及支持的主要来源。源数据问题还应遵循 MDN BCD 贡献流程。
标签:MITM代理, 暗色界面, 自动化攻击