Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

State/liveness keyed on PID alone is vulnerable to PID reuse

未关闭
#1,755 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
csharp
领域
cli, devtools

调研方向

先阅读 DevProxy/State/StateManager.cs,尤其是 IsProcessRunning、LoadStateFromFileAsync 和 GetOrphanedSystemProxyStatesAsync,然后检查 DevProxy/State/ProxyInstanceState.cs,以了解状态文件数据。跟踪分离实例命令如何使用 PID 的存活状态。当 PID 被复用时拒绝过期状态,同时仍能识别合法实例,即视为完成。

由索引模型根据 Issue 内容生成。

描述

Description

Dev Proxy tracks detached instances by PID alone (state-<pid>.json), and StateManager determines whether an instance is "alive" purely by checking whether a process with that PID currently exists (StateManager.IsProcessRunning(int pid) → Process.GetProcessById).

Operating systems recycle PIDs. After an instance exits (cleanly or via crash), its PID number can be reassigned to a completely unrelated process. When that happens:

  • IsProcessRunning(pid) returns true for the stale state record, so Dev Proxy believes its old instance is still alive.
  • Commands that key on liveness (stop, status, LoadAllStatesAsync, FindSystemProxyInstanceAsync, and the crash-recovery / orphaned-system-proxy reconciliation added in the stop --force fix) can act on — or refuse to act on — the wrong process.

This is a pre-existing, low-probability correctness issue in the whole detached-instance design; it is independent of any single command.

Suggested fix

Store additional identity beyond the PID in the state file and verify it before treating a PID as "our" live instance. Options:

  • Persist the process start time (Process.StartTime) alongside the PID, and in IsProcessRunning compare the running process's start time to the recorded value — a mismatch means the PID was reused and the record is stale.
  • Optionally also persist the process name / a Dev Proxy marker as a secondary check.

Process.StartTime is available cross-platform in .NET and is the standard, low-cost way to disambiguate PID reuse.

Notes

  • Found while implementing the fix for #1731 (devproxy stop --force cannot restore the system proxy after a crashed instance). That fix relies on asSystemProxy state records to reconcile orphaned system-proxy registrations; PID-reuse hardening would make that reconciliation (and all liveness checks) more robust but is intentionally out of scope for that change.
  • Affected code: DevProxy/State/StateManager.cs (IsProcessRunning, LoadStateFromFileAsync, GetOrphanedSystemProxyStatesAsync), DevProxy/State/ProxyInstanceState.cs.
主要语言
C#
星标
835
派生
90
平均合并
12 小时 53 分钟
30 天内合并 PR
44

环境准备

  • 提供 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

dotnet/dev-proxy 的其他 Issue

查看 dotnet/dev-proxy 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。