本文档由 g2rain-app-cli 的
# 安全边界
docs/security/security-boundaries.md 自动同步生成。# 路径
- 项目名和模板路径都视为不可信输入。
- 最终目标必须解析为预期父目录内的直接子目录,不接受绝对路径、
..、分隔符逃逸或平台保留名。 - 不覆盖已有目录;临时目录清理只针对本次创建且已验证的路径。
- 明确符号链接策略,避免复制时越过模板根目录或写入目标外部。
# 外部命令与网络
- Git clone 使用参数数组进程 API,不拼接 shell 字符串。
- 模板仓库、Ref 和下载来源必须可信、可追踪,正式版本建议校验 Commit/完整性。
- 网络错误、认证提示和 Git 输出不应泄露 Token/代理凭据。
- 不自动执行模板内脚本、postinstall 或任意命令,除非用户明确同意且安全模型完整。
# 模板供应链
- 不复制
.git、node_modules、dist、密钥、生产配置和本机状态。 - 模板/CLI/Profile 版本建立兼容关系,防止同一 CLI 版本静默生成不同架构。
- 生成后依赖安装仍执行第三方 package 生命周期脚本,开发者应审查 lockfile、registry 和依赖来源。
- npm 发布启用组织权限、2FA/provenance,并检查 tarball 不含源码外 Secret。
# 输入与日志
- 项目名和 Context Path 使用允许列表校验,并在错误中显示安全、可操作提示。
- 环境变量
G2RAIN_TEMPLATE_PATH只作为路径,不作为 shell 片段。 - 不打印 npm Token、Git 凭据、私有仓库 URL 中的 Secret 或完整环境。
- 生成项目不得从模板继承生产 Token、私钥、Cookie 或用户数据。
# 漏洞报告
按根目录 SECURITY.md (opens new window) 私下报告,说明受影响的是 CLI、模板还是生成项目,不创建包含利用细节的公开 Issue。