工具白名单与参数校验
注入最终要落到一次工具调用才能造成实际影响,所以工具调用这一环必须收口:工具名在注册表内做枚举校验,参数按 schema 校验类型、范围与格式,写操作与高影响参数(金额、收件人、路径)二次确认。自由文本不能直接变成调用语句,否则一次注入就是一次越权。
基本信息
| 工具名 | 必须在注册表内(枚举校验),白名单外一律拒绝 |
|---|---|
| 参数 | 按 schema 校验类型、范围、正则;越界拒绝 |
| 高影响参数 | 金额、收件人、文件路径需二次确认 |
| 记录 | 工具、参数、触发来源(用户指令还是内容) |
典型使用场景
- 工单代理:只允许创建与查询,不允许删除
- 财务代理:转账金额超过阈值时强制人工确认
- 运维代理:命令按白名单模板执行,不接受任意 shell 字符串
- 数据代理:查询语句限定可访问的库表范围
- 外部 API 代理:接口与参数取值一并枚举
调用前校验示例
调用前校验示例
1) 工具名必须在注册表内(枚举校验),未注册直接拒绝
2) 参数按 schema 校验:类型 / 范围 / 正则;越界返回错误
3) 写操作与高影响参数(金额、收件人、路径)二次确认
4) 调用记录:工具名、参数、触发来源、影响行数
5) 新增工具走评审流程,评审通过才进注册表
# 触发来源要能区分:用户明确要求,还是内容里诱导出来的
# 内容诱导的写操作一律升级为人工确认校验层次与失效后果
| 层次 | 校验内容 | 跳过后的后果 |
|---|---|---|
| 工具名 | 是否在注册表内 | 注入可调用未授权能力 |
| 参数类型 | 数字、字符串、布尔等类型 | 类型错投导致下游异常或注入 |
| 参数范围 | 取值区间与枚举 | 越界参数触发非预期行为 |
| 高影响参数 | 金额、收件人、路径二次确认 | 误转账、误发信、误删文件 |
| 调用记录 | 工具、参数与来源 | 事后无法区分正常与异常调用 |
把工具名与参数直接拼接成命令执行,是最危险的实现方式:一次成功的注入就能越权调用任意能力,而日志里看不出与正常调用有什么区别。
只校验工具名不校验参数,等于开了半扇门。参数校验要覆盖范围与格式,尤其是金额、文件路径、收件人这类高影响字段。