本文档提供 Cinder 执行器的安全最佳实践指南。
Cinder 执行器采用多层安全防护机制:
┌─────────────────────────────────────────────────────┐
│ 用户输入 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 路径验证层 (Path Validation) │
│ - 检查路径是否在工作目录内 │
│ - 检查文件扩展名是否允许 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 代码分析层 (Code Analysis) │
│ - 检测危险代码模式 │
│ - 风险一致性评估 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 文件操作层 (File Operations) │
│ - 自动备份 │
│ - 安全写入 │
└─────────────────────────────────────────────────────┘
所有文件操作都限制在指定的工作目录内:
# 正确:使用相对路径
cinder execute "创建 main.py"
# 错误:尝试访问工作目录外的文件
cinder execute "创建 /etc/passwd" # 会被拒绝只有以下文件类型被允许创建:
| 类型 | 扩展名 | 说明 |
|---|---|---|
| Python | .py |
Python 源代码 |
| JavaScript | .js |
JavaScript 源代码 |
| TypeScript | .ts |
TypeScript 源代码 |
| Web | .html, .css |
网页文件 |
| 配置 | .json, .yaml, .yml |
配置文件 |
| 文档 | .md, .txt |
文档文件 |
| 脚本 | .sh |
Shell 脚本 |
系统会检测并拒绝路径遍历攻击:
# 以下尝试都会被拒绝
../../../etc/passwd
~/../secret_file
./symlink_to_outside反思引擎会检测以下危险模式:
| 模式 | 风险等级 | 说明 |
|---|---|---|
eval() |
高 | 动态执行代码,可能注入恶意代码 |
exec() |
高 | 动态执行代码,可能注入恶意代码 |
__import__() |
中 | 动态导入模块,可能加载恶意模块 |
subprocess.call() |
中 | 执行系统命令,需要谨慎使用 |
os.system() |
高 | 执行系统命令,高风险 |
代码风险会与用户的 soul 配置进行比对:
# soul.meta.yaml
traits:
risk_tolerance: 30 # 保守型用户
# 如果生成的代码包含 eval(),会触发警告
# 因为保守型用户应避免高风险代码推荐的安全代码:
def safe_divide(a: float, b: float) -> float:
"""安全除法,包含错误处理。"""
if b == 0:
raise ValueError("除数不能为零")
return a / b应避免的危险代码:
def unsafe_execute(user_input: str):
"""危险:直接执行用户输入"""
exec(user_input) # 不安全!- 不要在代码中硬编码敏感信息
# 错误
API_KEY = "sk-xxxxx"
# 正确:使用环境变量
import os
API_KEY = os.environ.get("API_KEY")- 配置文件安全
# ~/.cinder/config.yaml
# 不要存储敏感信息
# 正确:使用环境变量引用
database_url: ${DATABASE_URL}执行日志不记录敏感信息:
- 不记录 API 密钥
- 不记录密码
- 不记录个人身份信息
适用于生产环境:
# ~/.cinder/config.yaml
# 高质量阈值
quality_threshold: 0.9
# 启用备份
enable_backup: true
# 确认删除
confirm_deletion: true
# 启用反思
enable_reflection: true
# 限制文件大小
max_file_size: 524288 # 512KB适用于开发测试:
# 开发环境可以更宽松
quality_threshold: 0.6
enable_backup: true
confirm_deletion: false
enable_reflection: true# 完全禁用某些操作
security:
disable_eval: true
disable_exec: true
disable_subprocess: true使用 Cinder 前,请确认:
- 在正确的目录下执行命令
- 检查生成的代码是否包含危险模式
- 确认文件扩展名正确
- 检查 soul 配置是否符合你的风险偏好
- 启用备份功能
- 定期检查执行日志
如果发现安全问题:
- 立即停止使用:停止执行任何新任务
- 检查备份:查看
.cinder_backups/目录 - 审查日志:检查执行日志中的异常
- 回滚更改:使用
cinder execution rollback回滚 - 报告问题:在 GitHub Issues 中报告