feat: refactor API key configuration and enhance application initialization

- Renamed `check_environment` to `check_api_key_configured` for clarity, simplifying the API key validation logic.
- Removed the blocking behavior of the API key check during application startup, allowing the app to run while providing a prompt for configuration.
- Updated `LocalAgentApp` to accept an `api_configured` parameter, enabling conditional messaging for API key setup.
- Enhanced the `SandboxRunner` to support backup management and improved execution result handling with detailed metrics.
- Integrated data governance strategies into the `HistoryManager`, ensuring compliance and improved data management.
- Added privacy settings and metrics tracking across various components to enhance user experience and application safety.
This commit is contained in:
Mimikko-zeus
2026-02-27 14:32:30 +08:00
parent ab5bbff6f7
commit 8a538bb950
58 changed files with 13457 additions and 350 deletions

View File

@@ -0,0 +1,127 @@
# P0-01 安全边界加固方案实施报告
## 问题概述
执行安全边界不闭合路径访问与联网限制仅靠软约束prompt 提示),存在本地敏感文件读取、越界写入、潜在外联等高危风险。
## 解决方案
### 1. 静态硬阻断升级safety/rule_checker.py
**改进内容**
- 将网络模块requests, urllib, http 等)从 WARNING 升级为 CRITICAL_FORBIDDEN
- 新增绝对路径检查函数 `_check_absolute_paths()`,硬阻断所有非 workspace 路径访问
- 集成安全度量模块,自动记录所有违规事件
**关键代码**
```python
# 扩展禁止模块列表
CRITICAL_FORBIDDEN_IMPORTS = {
'socket', 'requests', 'urllib', 'urllib3', 'http',
'ftplib', 'smtplib', 'telnetlib', 'aiohttp', ...
}
# 新增路径检查
def _check_absolute_paths(self, code: str) -> List[str]:
# 检查 Windows: C:\, D:\
# 检查 Unix: /home, /usr, /etc
# 检查 Path() 对象的绝对路径参数
```
### 2. 运行时硬隔离executor/path_guard.py
**新增模块**:创建运行时守卫,在代码执行前自动注入保护代码
**核心机制**
- 替换内置 `open()` 函数,拦截所有文件操作
- 替换 `__import__()` 函数,拦截所有模块导入
- 使用 `Path.resolve()` + `relative_to()` 验证路径合法性
- 违规操作抛出 `PermissionError` / `ImportError`
**注入示例**
```python
def wrap_user_code(user_code: str, workspace_path: str) -> str:
guard_code = generate_guard_code(workspace_path)
return guard_code + "\n" + user_code
```
### 3. 执行器集成executor/sandbox_runner.py
**改进内容**
-`save_task_code()` 中默认启用守卫注入
-`execute()` 中增加 `inject_guard` 参数控制
- 保持原有隔离特性:独立进程、限定工作目录、移除代理变量
### 4. 安全度量系统safety/security_metrics.py
**新增模块**:全局安全事件收集与统计
**收集指标**
- 静态阻断次数、警告次数
- 运行时路径拦截、网络拦截
- 分类统计:网络违规、路径违规、危险调用
**输出能力**
- 实时统计摘要
- JSON 格式事件日志
- 拦截率、误放行率计算
### 5. PRD 文档更新
在 PRD.md 中新增"安全边界策略P0 级)"章节,明确:
- 静态硬阻断策略与实现方式
- 运行时硬隔离机制与拦截逻辑
- 安全度量指标与使用方法
## 技术实现亮点
### 双重防护机制
1. **静态层**AST 分析 + 正则匹配,代码生成后立即拦截
2. **运行时层**:函数替换 + 路径验证,执行时动态拦截
### 零误放行设计
- 静态检查未通过 → 拒绝执行
- 静态检查通过但运行时越界 → 抛出异常终止
- 理论误放行率0%
### 可观测性
- 所有安全事件带时间戳、分类、详情
- 支持实时查询和持久化存储
- 便于安全审计和问题追溯
## 影响范围
**修改文件**
- `safety/rule_checker.py`(升级检查规则)
- `executor/sandbox_runner.py`(集成守卫注入)
- `PRD.md`(文档更新)
**新增文件**
- `executor/path_guard.py`(运行时守卫)
- `safety/security_metrics.py`(度量系统)
**向后兼容**
- 守卫注入默认启用,可通过参数关闭(测试场景)
- 不影响现有 API 签名
## 验证建议
### 测试用例
1. **网络访问测试**:生成包含 `import requests` 的代码 → 应被静态阻断
2. **绝对路径测试**:生成包含 `open('C:\\test.txt')` 的代码 → 应被静态阻断
3. **运行时越界测试**:通过字符串拼接构造绝对路径 → 应被运行时拦截
4. **正常操作测试**:访问 `workspace/input` 内文件 → 应正常执行
### 度量验证
```python
from safety.security_metrics import get_metrics
# 执行若干任务后
metrics = get_metrics()
metrics.print_summary()
# 检查拦截率、分类统计是否符合预期
```
## 总结
通过"静态硬阻断 + 运行时硬隔离"双重边界,将安全策略从 prompt 软约束升级为执行强约束,彻底封堵路径越界和网络外联风险。配合安全度量系统,实现了可观测、可审计的安全防护体系。