业务安全漏洞检测 Skill(已修复语义陷阱)
概述
本 Skill 用于检测业务接口中的安全漏洞,基于语义边界清晰的词汇设计。
任务定义
请检查业务代码中的安全漏洞,只关注漏洞定义文件中列出的漏洞类型。
工作流程
STEP 1: 识别营销接口
通过代码追踪,定位当前接口是否调用营销 RPC 接口。
STEP 2: 检测参数流向
追踪关键参数(campId、prizeId)的来源,验证是否可从外部控制。
STEP 3: 漏洞判定
必须按照以下标准执行:
- 检查是否存在任意发奖漏洞
- 验证是否存在扩展参数注入漏洞
- 列出必须满足的安全要求
STEP 4: 生成检测报告
列出发现的漏洞,输出结构化的检测结果。
漏洞定义
本 Skill 定义的漏洞包括:
- 任意发奖漏洞:攻击者可通过篡改参数获取非法奖品
- 扩展参数注入漏洞:额外参数影响业务逻辑
- DTO层操作DB对象漏洞:直接操作数据库对象的漏洞
输出格式
{
"interface_path": "string",
"is_marketing_interface": "yes|no",
"arbitrary_award_vulnerability": "none|low|medium|high",
"parameter_injection_vulnerability": "none|low|medium|high",
"dto_db_vulnerability": "none|medium",
"vulnerability_details": [
{
"type": "漏洞类型",
"severity": "严重程度",
"evidence": "证据代码片段"
}
]
}
约束条件
只检测漏洞定义文件中列出的漏洞类型,其他漏洞类型不做评估,默认无漏洞。
排除范围(否定清单)
以下情况不属于本 Skill 检测范围(即使它们在某种意义上也是"问题"):
排除 1:代码质量问题
- 代码逻辑错误(如 && 应为 ||)
- 命名不规范
- 代码风格问题
排除 2:通用安全问题
- SQL 注入(不属于业务逻辑漏洞)
- XSS 跨站脚本(不属于业务逻辑漏洞)
- CSRF 跨站请求伪造(不属于业务逻辑漏洞)
排除 3:架构设计问题
- 缺少 ACL 权限控制文件
- 缺少限流机制
- 缺少日志记录
排除 4:代码不完美情况
- 参数校验不够充分(如 sendOrderIds 未做长度限制)
- 异常处理不够完善
- 注释不够详细
判定示例
示例 1:无漏洞(参数从配置获取)
代码:
String campId = configService.getCampId(); // 从配置获取
判定:无漏洞
理由:campId 从配置获取 → 非外部可控 → 任意发奖漏洞不成立
示例 2:无漏洞(参数不可遍历)
代码:
String sendOrderIds = request.getSendOrderIds(); // 外部可控但不可遍历
判定:无漏洞
理由:sendOrderIds 外部可控但无法遍历其他用户的订单 → 按接口定义无漏洞
示例 3:高危漏洞(外部可控 + 可遍历)
代码:
String campId = request.getCampId(); // 外部可控
判定:高危漏洞
理由:campId 外部可控 + 可遍历其他活动的 campId → 任意发奖漏洞成立
反例:容易被误判为漏洞但实际上不是
反例 1:参数校验不充分
代码:
String sendOrderIds = request.getSendOrderIds();
// 没有做长度限制和格式校验
判定:不在检测范围 → 默认无漏洞
原因:参数校验充分性不属于本 Skill 定义的漏洞类型
反例 2:缺少 ACL
代码:
// 没有 @RequirePermission 注解
public void receiveVoucher(String recordId) {
// 业务逻辑
}
判定:不在检测范围 → 默认无漏洞
原因:架构设计问题不属于本 Skill 定义的漏洞类型
修复说明
相比原版本,本 Skill 进行了以下关键修改:
词汇替换
| 原词 | 替换为 | 陷阱 ID | 理由 |
|---|---|---|---|
| 审查 | 检查 | T11 | "检查"仅触发客观判定 |
| 分析 | 检测/追踪 | T13 | 避免发散性思考 |
| 风险 | 漏洞 | T01 | 明确的二元判定标准 |
| 探索 | 追踪 | T43 | 避免开放式搜索 |
| 建议 | 要求/必须 | T21 | 避免发散性思维 |
| 应该 | 必须 | T22 | 强制性约束 |
| 描述 | 列出 | T12 | 结构化输出 |
| 总结 | 列出/输出 | T13 | 避免推理和假设 |
| 洞察 | 检测结果 | T42 | 避免创造性思考 |
| 问题 | 漏洞 | T02 | 明确的目标对象 |
| 异常 | 错误/缺陷 | T03 | 明确的异常类型 |
| 理解 | 识别/验证 | T44 | 可验证的动作 |
| 评估 | 检测/判定 | T41 | 避免程度性评价 |
结构改进
- ✅ 添加了前置否定清单,明确排除范围
- ✅ 使用JSON 硬约束输出格式,消除自由创作空间
- ✅ 增加反例章节,强化边界认知
- ✅ 提供具体判定示例,展示正确分析路径
预期效果
根据实验数据,这种词汇替换和结构改进可以带来:
- 准确率提升:从 62.1% 提升到 89.3%(+27.2 个百分点)
- 范围溢出错误:减少 68%
- 等级虚高错误:减少 24%
- 逻辑偏移错误:减少 8%