Skip to content

安全实践

本章涵盖两个层面:如何保护自己免受 AI 误操作影响(沙箱/信任),以及如何让 AI 生成更安全的代码


第一部分:运行时安全(保护自己)

理解沙箱模型

Codex 的沙箱系统控制它在你的机器上能做什么:

模式文件读取文件写入命令执行网络访问
信任模式 (trusted)✅ 允许✅ 允许✅ 自动✅ 允许
沙箱模式 (untrusted)✅ 允许⚠️ 审批⚠️ 审批⚠️ 审批

关键概念:信任级别按项目目录配置。信任一个目录意味着"我接受 Codex 在该目录中执行任何操作"。

信任级别配置

toml
# ~/.codex/config.toml
[projects."/home/haha/codes/my-app"]
trust_level = "trusted"

[projects."/tmp/downloads"]
trust_level = "untrusted"

何时信任 vs 何时不信任

✅ 应该标记为 trusted 的场景

  • 自己长期维护的项目
  • 团队共享的内部代码库
  • CI/CD 环境的临时构建目录

❌ 应该保持 untrusted 的场景

  • 从外部下载的代码
  • 来自客户的示例代码
  • 不确定安全性的开源项目
  • 系统目录(/etc/usr 等)

审批流程

当操作需要审批时,Codex 会显示:

⚠️ 需要审批:执行命令 rm -rf node_modules
  原因:项目信任级别为 untrusted
  是否允许? [y/N]

决策建议:

  • 低风险操作git statusnpm test)→ 批准
  • 中风险操作(文件删除、文件覆盖)→ 确认意图后决定
  • 高风险操作rm -rf、修改系统文件)→ 拒绝并手动执行

安全使用清单

  • [ ] 仅对了解的项目标记为 trusted
  • [ ] 定期审查 config.toml 中的信任项目列表
  • [ ] 不在对话中粘贴 API 密钥或密码
  • [ ] 使用 Secret Scanning 防止密钥泄露
  • [ ] 定期更新 Codex 以获得最新的安全修复

第二部分:代码安全(编写更安全的代码)

在提示词中加入安全约束

> 实现用户登录 API:
> - 使用 bcrypt 进行密码哈希(salt rounds ≥ 12)
> - 防止 SQL 注入(使用参数化查询)
> - 限制登录频率(每分钟最多 5 次)
> - 不在错误消息中泄露用户是否存在

常见安全审查关注点

风险类型AI 常犯的错误提示词修正
输入验证忘记 sanitize"所有用户输入必须经过 sanitize 处理"
认证弱密码策略"遵循 OWASP 认证最佳实践"
加密使用明文存储"敏感数据使用 AES-256 加密"
错误处理泄露内部信息"错误消息不暴露内部实现细节"

使用 Codex Security 插件

Codex Security 插件提供自动化的安全扫描能力:

扫描类型触发方式适用场景
仓库安全扫描"扫描这个仓库的安全问题"日常安全审计
深度安全扫描"深度安全分析"发布前最终检查
差异扫描"检查这次变更的安全性"PR 安全审查

何时用 Codex Security 插件 vs 普通提示词

  • Codex Security 插件:全面系统性扫描,包括攻击路径分析、漏洞验证
  • 普通提示词 + 安全约束:开发过程中的增量安全控制,在编写代码时就确保安全

Secret Scanning

Codex 会自动扫描提交中的密钥和令牌:

> 扫描最近 5 次提交中是否包含密钥
> 帮我检查这个 PR 中是否有硬编码的 API key

如果发现密钥泄露:

  1. 立即撤销已泄露的密钥
  2. 使用 git filter-branchBFG 从历史中移除
  3. 将密钥移至环境变量或密钥管理服务

防御性编程提示模板

请重构 @src/utils/api.ts 中的错误处理:
- 所有外部输入视为不可信
- 对 API 返回数据进行类型验证
- 添加合理的超时和重试策略
- 敏感信息不出现在错误日志中

安全参考资料

下一步

基于 Codex CLI v0.142.5