- 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.
4.1 KiB
4.1 KiB
P0-01 安全边界加固方案实施报告
问题概述
执行安全边界不闭合,路径访问与联网限制仅靠软约束(prompt 提示),存在本地敏感文件读取、越界写入、潜在外联等高危风险。
解决方案
1. 静态硬阻断升级(safety/rule_checker.py)
改进内容:
- 将网络模块(requests, urllib, http 等)从 WARNING 升级为 CRITICAL_FORBIDDEN
- 新增绝对路径检查函数
_check_absolute_paths(),硬阻断所有非 workspace 路径访问 - 集成安全度量模块,自动记录所有违规事件
关键代码:
# 扩展禁止模块列表
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
注入示例:
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 级)"章节,明确:
- 静态硬阻断策略与实现方式
- 运行时硬隔离机制与拦截逻辑
- 安全度量指标与使用方法
技术实现亮点
双重防护机制
- 静态层:AST 分析 + 正则匹配,代码生成后立即拦截
- 运行时层:函数替换 + 路径验证,执行时动态拦截
零误放行设计
- 静态检查未通过 → 拒绝执行
- 静态检查通过但运行时越界 → 抛出异常终止
- 理论误放行率:0%
可观测性
- 所有安全事件带时间戳、分类、详情
- 支持实时查询和持久化存储
- 便于安全审计和问题追溯
影响范围
修改文件:
safety/rule_checker.py(升级检查规则)executor/sandbox_runner.py(集成守卫注入)PRD.md(文档更新)
新增文件:
executor/path_guard.py(运行时守卫)safety/security_metrics.py(度量系统)
向后兼容:
- 守卫注入默认启用,可通过参数关闭(测试场景)
- 不影响现有 API 签名
验证建议
测试用例
- 网络访问测试:生成包含
import requests的代码 → 应被静态阻断 - 绝对路径测试:生成包含
open('C:\\test.txt')的代码 → 应被静态阻断 - 运行时越界测试:通过字符串拼接构造绝对路径 → 应被运行时拦截
- 正常操作测试:访问
workspace/input内文件 → 应正常执行
度量验证
from safety.security_metrics import get_metrics
# 执行若干任务后
metrics = get_metrics()
metrics.print_summary()
# 检查拦截率、分类统计是否符合预期
总结
通过"静态硬阻断 + 运行时硬隔离"双重边界,将安全策略从 prompt 软约束升级为执行强约束,彻底封堵路径越界和网络外联风险。配合安全度量系统,实现了可观测、可审计的安全防护体系。