Skip to content

feat(browser): 受限 Safe Web 操作者入口与 readiness 收据 #41

Closed

Description

@Qiyuanqiii

Parent: #33
Blocked by: #1

问题概述 / Summary

现有浏览器基础能力不能在 Windows WFP 生产证据未通过时直接开放。待 #1 验收后,需要把受限 Safe Web 作为独立、可解释、默认关闭的操作者入口接入 Run、CLI、HTTP 与 Desktop。

当前基线 / Current baseline

范围 / Scope

  • 消费 bug(browser): Windows WFP 受限浏览器生产探针尚未通过验收 #1 产生的短期、签名/指纹绑定的 network containment evidence。
  • 定义 readiness 判定、过期、版本、可执行文件身份和策略指纹匹配。
  • 建立“选择目标 → 预览 Scope → 审批 → 启动 → 观察 → 关闭/清理”的操作者流程。
  • 接入 Run Activity、Artifact、审计与失败诊断。
  • Desktop 仅在全部证据通过时启用入口;否则展示精确阻塞原因。

非目标 / Non-goals

  • 不实现 Full CDP。
  • 不自动访问公网目标。
  • 不复用用户日常浏览器 Profile、Cookie、扩展或已登录会话。

涉及目录 / Affected directories

  • internal/browserruntime/
  • internal/application/
  • internal/policy/
  • internal/approval/
  • internal/store/
  • internal/events/
  • internal/httpapi/
  • cmd/cyberagent/
  • cmd/cyberagent-desktop/
  • web/src/
  • docs/adr/

依赖 / Dependencies

验收条件 / Acceptance criteria

  • evidence 缺失、过期、版本不匹配、浏览器 hash 改变或策略指纹改变时入口 fail closed。
  • 错误端口、错误 loopback 地址、非 loopback、IPv6 和代理绕过测试通过。
  • Profile 每 Run 隔离,结束/崩溃/取消后有可验证清理收据。
  • 操作者能看到目标、网络边界、权限、有效期和风险后再批准。
  • Activity 只把 Go 观察到的事实标记为已完成。
  • CLI、HTTP/OpenAPI、Desktop 行为一致。
  • Windows 实机 smoke 与自动测试证据附在 Issue。

临时策略 / Interim policy

在 #1 关闭前保持产品入口禁用,只允许描述性计划与 Disabled/Fake 合约测试。

Activity

  1. added
    enhancementNew feature or request
    help wantedExtra attention is needed
    goPull requests that update go code
    javascriptPull requests that update javascript code
    browserBrowser runtime and CDP capabilities
    blockedBlocked by external evidence or dependency
    securitySecurity boundary or high-risk capability
    on Aug 13, 2026
  2. Qiyuanqiii commented on Aug 15, 2026

    @Qiyuanqiii
    MemberAuthor

    Windows 实机 smoke 证据(#7)

    这是 issue #1 修复验证时产生的真实管理员生产探针证据(真实 Chrome、真实 WFP 动态会话、UAC 提权)。11 项验收全部为 true,passed: true,退出码 0,探针结束后无残留 WFP 规则/浏览器进程/临时 Profile。

    {
      "protocol_version": "browser_network_containment_evidence.v1",
      "id": "browser-network-probe-1786818963250266100",
      "executable_identity_fingerprint": "9f3582cec7cea08cd8f1d331078f8d71f3ce5c39714ad21232b0eae342cc1d53",
      "acceptance_fingerprint": "2ec37c2299af74442fda0ae92d9cbad8e98f5637e39a7d9eb5f89cd9100c66a6",
      "adapter": "windows_wfp_dynamic.v1",
      "policy_version": "browser_network_containment_policy.v2",
      "operating_system": "windows",
      "architecture": "amd64",
      "collector_identity": "local-operator",
      "dynamic_session_observed": true,
      "atomic_install_observed": true,
      "exact_target_observed": true,
      "wrong_port_denied": true,
      "wrong_loopback_address_denied": true,
      "non_loopback_address_denied": true,
      "ipv6_denied": true,
      "rule_cleanup_observed": true,
      "cdp_used": false,
      "synthetic": false,
      "production": true,
      "passed": true,
      "started_at": "2026-08-15T18:36:03.269728Z",
      "completed_at": "2026-08-15T18:36:06.1084144Z",
      "expires_at": "2026-08-15T18:51:06.1084144Z",
      "fingerprint": "e7504ebd7658c7163f4991ff6d66b9529ecb0b2d17d884d37852a2d5690bb906"
    }

    验收条件映射

    条件 证据
    dynamic_session_observed: true 动态 WFP 会话已建立
    atomic_install_observed: true 过滤器原子安装
    exact_target_observed: true 精确 loopback 目标可达
    wrong_port_denied: true 错误端口被拒
    wrong_loopback_address_denied: true 错误 loopback 地址被拒
    non_loopback_address_denied: true 非 loopback 被拒
    ipv6_denied: true IPv6 被拒
    rule_cleanup_observed: true 规则清理验证
    synthetic: false / production: true 非伪造、真实生产
    passed: true 全部通过

    依赖说明

    此证据产生于 #1 的 token 修复(PR #69:TOKEN_ALL_ACCESS)。本 #41 分支基于 main,在 PR #69 合并前,其 doctor browser-network-probe 会在本机(Microsoft 账户)复现 #1 的 baseline_process_create_with_token_access_denied。因此本 #41 的实机 smoke 依赖 PR #69 先合并——合并后探针即可通过,doctor browser-network-probe → browser-network-review → browser-readiness 全链路将返回 ready: true。

    自动测试证据

    • Go 侧:internal/{browserruntime,store,application,app,httpapi,runactivity} 全量 go test 通过。
    • Web:typecheck、vitest(59 文件 238 用例)、vite build、check:api 通过。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedBlocked by external evidence or dependencybrowserBrowser runtime and CDP capabilitiesenhancementNew feature or requestgoPull requests that update go codehelp wantedExtra attention is neededjavascriptPull requests that update javascript codesecuritySecurity boundary or high-risk capability高难度

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions