docs: add junction-safe unlink rule to defensive patterns

This commit is contained in:
Huanqi Cao
2026-08-12 11:32:03 +08:00
committed by Chinesezjc
parent 22d30852f7
commit a62884a565
3 changed files with 11 additions and 3 deletions

View File

@@ -26,4 +26,8 @@
## 绝不将环境变量或可预测路径暴露给不可信输出
启动的命令应使用经过清理的环境变量,移除名称匹配 `*KEY*``*SECRET*``*TOKEN*``*PASSWORD*` 的项,防止 harness 凭证通过命令输出、`env` 或 spill 文件泄漏。临时文件和 spill 文件应放在权限为 0700 的私有目录中,使用随机文件名,并以独占且仅所有者可访问的方式打开(`'wx'``0o600`);可预测且所有用户均可读的路径会引发符号链接竞态和信息泄露。
启动的命令应使用经过清理的环境变量,移除名称匹配 `*KEY*``*SECRET*``*TOKEN*``*PASSWORD*` 的项,防止 harness 凭证通过命令输出、`env` 或 spill 文件泄漏。临时文件和 spill 文件应放在权限为 0700 的私有目录中,使用随机文件名,并以独占且仅所有者可访问的方式打开(`'wx'``0o600`);可预测且全局可读的路径会引发符号链接竞态和信息泄露。
## 用 unlink 删除链接形态的路径
可能是符号链接或 Windows junction 的路径,应先用 `lstatSync().isSymbolicLink()` 判断,再用 `unlinkSync` 删除unlink 只删除链接本身并拒绝真实目录因此绝不会跟随链接进入其目标。Windows 上对 junction 调用 `rmSync(link)` 会抛 `ERR_FS_EISDIR`;递归删除可能穿过 junction 进入其目标。真实目录才使用带 `recursive``rmSync`