Skip to content

Commit 5ea9bdc

Browse files
author
SqlRush
committed
Guard PowerShell property and hash expressions
1 parent a1b4334 commit 5ea9bdc

4 files changed

Lines changed: 9 additions & 0 deletions

File tree

docs/cc-100-roadmap.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ M5 补充:PowerShell read-only classifier 收紧 `Get-Content`/`Get-Item`,
251251

252252
M5 补充:PowerShell read-only classifier 收紧 `Select-String`/`sls`,继续允许安全相对路径和普通 literal pattern/context/inputObject 参数,但拒绝动态表达式参数和越界路径。
253253

254+
M5 补充:PowerShell read-only classifier 收紧 `Get-ItemProperty`/`Get-ItemPropertyValue``Get-FileHash`,继续允许普通 literal name/algorithm 参数,但拒绝动态表达式参数和越界路径。
255+
254256
M5 补充:Bash 前台输出和 `BashOutput` 现在都走统一 tool-result budget 截断/落盘路径;`BashOutput` 增加 100k 最大结果限制,大后台输出会保存完整内容并返回 `full_output_path` 元数据。
255257

256258
M5 补充:Bash/PowerShell 后台任务现在会发 `*_background_started``*_background_finished` tool progress 事件,包含后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和输出字节数,不携带 command 文本;completed、timed_out、cancelled 终态均已覆盖测试。

docs/claude-code-go-rewrite-plan.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ test/parity/ # golden tests against TS/official behavior
236236
- 本轮补充:PowerShell read-only classifier 收紧 `Get-ChildItem`,继续允许安全相对路径、literal wildcard filter/include/exclude 和常见 attributes/depth 参数,但拒绝动态表达式参数和越界路径。
237237
- 本轮补充:PowerShell read-only classifier 收紧 `Get-Content`/`Get-Item`,继续允许安全相对路径和普通 literal encoding/read-count/stream 参数,但拒绝动态表达式参数和越界路径。
238238
- 本轮补充:PowerShell read-only classifier 收紧 `Select-String`/`sls`,继续允许安全相对路径和普通 literal pattern/context/inputObject 参数,但拒绝动态表达式参数和越界路径。
239+
- 本轮补充:PowerShell read-only classifier 收紧 `Get-ItemProperty`/`Get-ItemPropertyValue``Get-FileHash`,继续允许普通 literal name/algorithm 参数,但拒绝动态表达式参数和越界路径。
239240
- 本轮补充:`BashOutput` 现在设置 100k 最大结果大小,和前台 `Bash` 一起覆盖大输出 tool-result preview 截断、完整输出落盘及 `full_output_path` 元数据。
240241
- 本轮补充:Bash/PowerShell 后台命令现在会通过 tool progress 通道发 started/finished 事件,记录后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和 stdout/stderr byte count,且 completed、timed_out、cancelled 终态测试确保 progress 不携带 command 文本。
241242
- 本轮补充:WebSearch domain filters 现在在 schema 层声明 array `items:string`,通用 tool schema validator 同步支持 `items` 校验;`allowed_domains`/`blocked_domains` 会拒绝空字符串、URL/port、非法 wildcard 和非域名 label。

internal/tools/powershell/tools.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,6 +1268,7 @@ var powerShellReadOnlyCmdlets = map[string]powerShellReadOnlyConfig{
12681268
pathFlags: stringSet("path", "literalpath"),
12691269
valueFlags: stringSet("algorithm"),
12701270
validatePositionalsAsPaths: true,
1271+
rejectExpressionValues: true,
12711272
},
12721273
"get-acl": {
12731274
allowedFlags: stringSet("path", "literalpath", "audit", "filter", "include", "exclude"),
@@ -1345,12 +1346,14 @@ var powerShellReadOnlyCmdlets = map[string]powerShellReadOnlyConfig{
13451346
pathFlags: stringSet("path", "literalpath"),
13461347
valueFlags: stringSet("name"),
13471348
validatePositionalsAsPaths: true,
1349+
rejectExpressionValues: true,
13481350
},
13491351
"get-itempropertyvalue": {
13501352
allowedFlags: stringSet("path", "literalpath", "name"),
13511353
pathFlags: stringSet("path", "literalpath"),
13521354
valueFlags: stringSet("name"),
13531355
validatePositionalsAsPaths: true,
1356+
rejectExpressionValues: true,
13541357
},
13551358
"get-hotfix": {
13561359
allowedFlags: stringSet("id", "description"),

internal/tools/powershell/tools_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ func TestPowerShellCommandClassification(t *testing.T) {
353353
`Get-ItemProperty HKLM:\Software -Name Path`,
354354
`gip HKLM:\Software -Name Path`,
355355
`gpv C:\Users\secret.txt -Name Mode`,
356+
"Get-ItemProperty . -Name $env:SECRET",
357+
"Get-ItemPropertyValue . -Name @{N='Mode'}",
356358
`rvpa C:\Users\secret.txt`,
357359
"rvpa ../secret.txt",
358360
"Test-Path /etc/passwd",
@@ -372,6 +374,7 @@ func TestPowerShellCommandClassification(t *testing.T) {
372374
"Get-Acl -Path README.md -Filter $env:SECRET",
373375
"Get-FileHash /etc/passwd",
374376
`Get-FileHash -Path C:\Users\secret.txt`,
377+
"Get-FileHash -Algorithm $env:ALG README.md",
375378
"Get-FileHash -InputStream $stream",
376379
`Get-FileHash -InputStream ([IO.File]::OpenRead('/etc/passwd'))`,
377380
"Format-Hex /etc/passwd",

0 commit comments

Comments
 (0)