Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ cargo run -p codeischeap-desktop-api --bin export-desktop-contract

捕获范围与敏感字段由 `policies/capture-policy.v0.1.json` 定义,公开 schema 位于 `schemas/capture-policy/v0.1.schema.json`。Python sidecar 在 IPC 前执行策略,`crates/core` 在进入持久化前再次拒绝越界请求并删除遗漏凭据。

sidecar IPC 协议为 `0.4`:仅监听 loopback,使用每次 Proxy 会话重新生成的 256-bit token,认证帧限制为 1 KiB,并要求 `mitmproxy` 来源声明;认证、数据帧、Windows/macOS/Linux 首连接 sidecar PID 校验与服务端 ACK 共用 2 秒截止时间,sidecar 在收到 ACK 前保持连接。认证帧可携带严格校验的临时 loopback 端点用于进程归因,端点不会进入 CaptureEnvelope、持久化或导出。sidecar manifest 分别声明 IPC、Envelope 和 Policy 版本,不兼容 bundle 会在启动前被拒绝。
sidecar IPC 协议为 `0.4`:仅监听 loopback,使用每次 Proxy 会话重新生成的 256-bit token,认证帧限制为 1 KiB,并要求 `mitmproxy` 来源声明;认证、数据帧、Windows/macOS/Linux 首连接 sidecar PID 校验与服务端 ACK 共用 2 秒截止时间,sidecar 在收到 ACK 前保持连接。桌面另生成独立 256-bit readiness token,只有返回该 token 的打包 sidecar 才会被视为启动成功,普通端口占用者不会被误认。认证帧可携带严格校验的临时 loopback 端点用于进程归因,端点不会进入 CaptureEnvelope、持久化或导出。sidecar manifest 分别声明 IPC、Envelope 和 Policy 版本,不兼容 bundle 会在启动前被拒绝。

Gateway 和 Proxy 捕获会按显式客户端标签、User-Agent 规则或捕获模式回退生成带置信度的应用归因。Gateway 客户端可设置 `x-codeischeap-client: <application>` 提供高置信度标签;该内部请求头会在持久化和转发上游前删除。Windows、macOS 与 Linux 上的 Gateway 和 Proxy 会用操作系统 TCP 连接表精确匹配客户端 PID,查询失败时保持未知,不做启发式推断;Linux 通过 `/proc/net/tcp{,6}` 的精确四元组定位 socket inode,并只接受唯一进程 owner。sidecar 自报 PID 会被忽略,用于匹配的临时 socket 端点不会进入持久化或导出。未知客户端会明确显示为低置信度的 `Gateway client` 或 `Proxy client`。

Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 9 additions & 2 deletions apps/desktop/src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1160,13 +1160,20 @@ async fn ensure_proxy(app: &AppHandle, state: &DesktopState) -> Result<(), Strin
.map_err(|error| format!("capture IPC address is unavailable: {error}"))?;
let listen_addr = reserve_loopback_address()?;
let token = generate_ipc_token()?;
let startup_token = generate_ipc_token()?;
let confdir = app
.path()
.app_data_dir()
.map_err(|error| error.to_string())?
.join("mitmproxy");
let config =
SidecarLaunchConfig::new(ipc_addr, token.clone(), target_hosts, listen_addr, confdir);
let config = SidecarLaunchConfig::new(
ipc_addr,
token.clone(),
startup_token,
target_hosts,
listen_addr,
confdir,
);
let process = tauri::async_runtime::spawn_blocking(move || {
bundle.launch(&config, SIDECAR_STARTUP_TIMEOUT)
})
Expand Down
1 change: 1 addition & 0 deletions crates/sidecar-runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ regex.workspace = true
serde.workspace = true
serde_json.workspace = true
sha2.workspace = true
subtle.workspace = true
x509-parser.workspace = true

[target.'cfg(unix)'.dependencies]
Expand Down
Loading
Loading