增加非白名单的日志
This commit is contained in:
1 parent
7f4adad7b1
commit
06bb066d82
7 files changed
+332
-28
No files matched your search
@@ -3,8 +3,8 @@
|
||||
| 项 | 内容 |
|
||||
| --- | --- |
|
||||
| 项目 | `fire-safety-ymd` |
|
||||
| 状态 | SuperAgent 出站、用户对话 API v1 与空间只读 MCP 代码控制已实现;真实环境、最终用户授权和持久审计待完成 |
|
||||
| 最近更新 | 2026-09-05 |
|
||||
| 状态 | SuperAgent 出站、用户对话 API v1、兼容 Chat 403 Origin 诊断日志与空间只读 MCP 代码控制已实现;真实环境、最终用户授权和持久审计待完成 |
|
||||
| 最近更新 | 2026-09-07 |
|
||||
|
||||
## 1. 目的
|
||||
|
||||
@@ -63,7 +63,12 @@ MCP 第一阶段已按以下只读边界实现:
|
||||
- 权限不足与“没有数据”使用不同稳定状态,避免 Agent 猜测。
|
||||
- 调用记录至少关联 request ID、可信主体、工具名、授权范围、耗时、结果类别和数据源版本;审计日志不保存无必要的完整敏感正文。
|
||||
|
||||
当前日志已记录 request ID、操作、耗时和结果类别;可信主体、数据源版本和持久审计尚未实现,因此生产前仍需补齐。
|
||||
当前日志已记录 request ID、操作、耗时和结果类别;可信主体、数据源版本和持久审计尚未实现,因此生产前仍需补齐。兼容
|
||||
`completion` 的拒绝路径另有受限诊断字段:非预检请求仅在 Origin 被拒绝时记录
|
||||
`result=forbidden_origin` 和实际 Origin;CORS 预检拒绝记录
|
||||
`result=preflight_forbidden`、实际 Origin、请求方法、请求头名称集合和稳定 `reason`。
|
||||
每个请求 Header 最多保留前 256 个输入字节,超长值追加 `[truncated]` 后再引用/ASCII 转义;成功请求不记录
|
||||
Origin。日志绝不记录 `xtoken`、`Authorization`、`Cookie`、prompt/body、会话 ID 或 Provider 数据。
|
||||
|
||||
任何写工具、资源调度或状态变更都需要新的 Spec、幂等设计、人工确认边界、审计和安全 Review,不属于默认扩展。
|
||||
|
||||
@@ -109,10 +114,31 @@ MCP 第一阶段已按以下只读边界实现:
|
||||
| 精确设施或风险区域坐标 | 业务敏感 | 按权限最少披露,不记录完整结果集 |
|
||||
| 用户问题和对话 | 可能含敏感信息 | 默认不记录原文,使用摘要或分类字段 |
|
||||
| 工具名、耗时、结果类别 | 运行元数据 | 可记录,不附敏感 payload |
|
||||
| 兼容 Chat 被拒绝的 Origin 诊断字段 | 受限请求元数据 | 仅拒绝时记录引用/转义且有界的 Origin;预检附方法、请求头名称集合和原因;禁止 Secret 与请求正文 |
|
||||
|
||||
生产前需确定数据分类负责人、日志访问角色、保留周期、删除流程和安全事件响应方式。
|
||||
|
||||
当前 Chat 日志只记录 request ID、结果类别、是否复用和耗时,不记录消息、回答、对话 ID、Provider Session 或 Trace payload。`docs/import/db-samples/*.sql` 含真实联系人、电话和精确坐标,仅作为本地只读输入并由 Git 忽略;不得执行或进入版本历史。长期测试数据必须另做脱敏 fixture。
|
||||
当前 Chat 日志只记录 request ID、结果类别、是否复用和耗时,不记录消息、回答、对话 ID、Provider Session 或 Trace payload。
|
||||
兼容 `completion` 的 403 Origin 诊断是例外但仍受严格边界约束:`dashscope_chat_request` 在
|
||||
`result=forbidden_origin` 时记录有界的 `origin`;每个请求 Header 最多保留前 256 个输入字节,超长值追加
|
||||
`[truncated]` 后再引用/ASCII 转义。在
|
||||
`result=preflight_forbidden` 时再记录同样有界的 `preflight_method`、`preflight_headers` 和稳定
|
||||
`reason`(`origin_missing`、`origin_not_allowed`、`method_not_allowed` 或 `headers_not_allowed`)。
|
||||
这些字段只用于定位发送方的精确浏览器 Origin,不是授权凭证;不记录 `xtoken`、`Authorization`、`Cookie`、
|
||||
prompt/body、会话或 Provider 数据。`docs/import/db-samples/*.sql` 含真实联系人、电话和精确坐标,仅作为本地只读输入并由 Git 忽略;不得执行或进入版本历史。长期测试数据必须另做脱敏 fixture。
|
||||
|
||||
### 8.1 兼容 Chat 403 诊断与 Origin 白名单
|
||||
|
||||
本节只适用于 DashScope 风格兼容 `completion`。收到 HTTP 403 后,运维人员在受限日志中按 `request_id`
|
||||
关联响应;`result=forbidden_origin` 表示普通请求的 Origin 不在白名单,`result=preflight_forbidden`
|
||||
还需根据 `reason` 判断是来源、方法还是请求头名称集合不符合预检契约。日志中的值是经过引用/转义的非可信输入,
|
||||
不能当作 shell 代码执行;出现 `[truncated]` 时必须回到浏览器 Network 面板确认完整值。
|
||||
|
||||
确认发送方后,将精确的浏览器来源配置到 `FIRE_SAFETY_CHAT_ALLOWED_ORIGINS`:多个值用英文逗号分隔,
|
||||
每项的规范形式是 `scheme://host[:port]`,不能带非根路径、查询或片段,也禁止 `*`;单个末尾 `/` 会被接受并
|
||||
规范化移除,配置时建议省略。例如页面来源确实为 `http://example.test:9045` 时才加入该值;不要把 API
|
||||
路径、Nginx 上游地址或 `xtoken` 放入白名单。
|
||||
修改环境配置后必须重新 build(代码变更时)并 recreate 运行容器,不能依赖 `restart` 重新加载配置。
|
||||
|
||||
## 9. 应急场景安全
|
||||
|
||||
|
||||
Reference in new issue
Block a user