检测中转 API 服务是否存在提示词注入、上下文截断、指令覆盖、数据窃取等作恶行为的开源安全审计工具。
代码小白第一次Vibe Coding 不足之处还望海涵
线上版:https://apichecker.wpi.edu.kg/
pip install -r requirements.txt
ADMIN_PASSWORD=你的密码 python -m uvicorn api_relay_audit.web.main:app --host 0.0.0.0 --port 8000然后打开 http://localhost:8000 即可使用。
pip install -r requirements.txt
python scripts/audit.py audit --config config.yaml| # | 检测项 | 说明 |
|---|---|---|
| 1 | 🔍 Token 注入检测 | 发现每个请求被偷偷多注入的 token 数量 |
| 2 | 🛡️ 隐藏提示词注入 | 揪出响应中附加的非用户指令(如广告/翻译) |
| 3 | 验证 System Prompt 是否被忽略或替换 | |
| 4 | 📏 上下文截断检测 | Canary Marker + 二分搜索,精确定位截断边界 |
| 5 | 🔓 数据窃取检测 | 对话内容是否被持久化或跨会话泄漏 |
| 6 | 🧠 语义截断检测 | 用语义埋点(非精确标记)检测截断,无法被白盒规避 |
| 7 | 🎯 指令优先级检测 | 测试 system/developer/user 优先级是否被破坏 |
| 8 | ⏱️ 响应延迟异常检测 | 长上下文秒响应说明中转商偷懒没处理 |
| 9 | 📋 响应格式指纹检测 | 要求 JSON 格式输出,被污染则暴露注入 |
| 10 | 🔗 对话记忆链检测 | 第 N 轮能否引用第 1 轮信息,滑动窗口截断无处遁形 |
| 11 | 🌐 HTTP 头部深度检测 | 响应头 meta 信息注入检测 |
- OpenAI
/v1/chat/completions兼容 - Anthropic
/v1/messages兼容 - 自动探测(无需手动指定)
- 0–30 分:✅ 安全
- 31–60 分:
⚠️ 中等风险 - 61–80 分:🔴 高风险
- 81–100 分:☠️ 极危险
本项目基于 toby-bridges/api-relay-audit(MIT License)开发,在其基础上进行了大幅扩展:
| 维度 | 原项目 | 本项目 |
|---|---|---|
| 检测算法 | 7 项 | 11 项(新增 6 个扩展检测器) |
| 用户界面 | 无(仅 CLI) | Web UI + 管理后台 |
| API 接入 | 仅命令行 | FastAPI + REST 接口 |
| 上下文检测 | 精确 Canary | Canary + 语义埋点双重检测 |
| 并发支持 | 单线程 | asyncio 高并发 |
| 报告格式 | Markdown | JSON + Markdown + 可视化网页 |
| 配置管理 | 手工编辑 YAML | 网页后台可视化配置 |
| 测试覆盖 | 部分 | 140 个单元测试 + 靶机 |
语义截断检测(Semantic Truncation)
- 原项目用精确 canary 字符串,中转商可检测后故意保留
- 本项目改用语义埋点("我的幸运数字是 42"),靠语义相似度判断,无法规避
指令优先级检测(Instruction Priority)
- 利用
system > developer > assistant > user优先级,构造矛盾指令对验证
响应延迟异常检测(Response Latency)
- 测量
time_elapsed,长上下文但极快响应 = 偷懒不处理
响应格式指纹检测(Format Fingerprint)
- 要求模型输出特定 JSON 格式,注入会破坏格式
对话记忆链检测(Memory Chain)
- 测试第 N 轮能否引用第 1 轮信息,滑动窗口截断可被发现
HTTP 头部深度检测(Header Deep)
- 检查响应头是否有可疑的
X-Query-Log、X-Forwarded-For等 meta 注入
api-checker/
├── src/api_relay_audit/
│ ├── adapter/ # OpenAI + Anthropic 双格式自动适配
│ ├── detectors/ # 11 个检测器(T1-T11)
│ ├── engine/ # 审计编排 + RiskCalculator
│ ├── reports/ # JSON + Markdown 导出
│ ├── utils/ # Canary 生成器 + Token 估算
│ └── web/ # FastAPI 服务 + 网页 + 管理后台
├── scripts/ # CLI 入口
├── tests/ # 140 个单元测试 + 靶机
├── docs/ # 报告解读指南
├── README.md
├── LICENSE # Apache 2.0
├── NOTICE # 原项目归属声明
└── content.yaml # 网站内容配置
一次完整的 11 项审计大约消耗 4,000,000–4,500,000 输入 tokens,约 100,000 输出 tokens。
| 检测器 | 请求次数 | Input Tokens(估算) |
|---|---|---|
| Token 注入 | 4 | ~800 |
| 隐藏提示词注入 | 6 | ~3,000 |
| 指令覆盖 | 4 | ~400 |
| 上下文截断 | ~20 | ~2,000,000 |
| 语义截断 | ~15 | ~1,500,000 |
| 指令优先级 | 4 | ~1,200 |
| 响应延迟 | 6 | ~800,000 |
| 响应格式 | 3 | ~3,000 |
| 对话记忆链 | 8 | ~40,000 |
| HTTP 头部深度 | 3 | ~600 |
| 数据窃取 | 4 | ~2,000 |
| 合计 | ~77次 | ~4,350,000 |
以 gpt-4o-mini 为例($0.15 / 1M input,$0.60 / 1M output):
输入:4,350,000 ÷ 1,000,000 × $0.15 = $0.65
输出:100,000 ÷ 1,000,000 × $0.60 = $0.06
────────────────────────────────────────────
合计:约 $0.71 美元 / 次完整审计
在 config.yaml 中关闭上下文截断和语义截断(最费 token 的两项),可节省约 70% 费用:
detectors:
context_truncation: { enabled: false } # 省 ~50%
semantic_truncation: { enabled: false } # 省 ~20%关闭后每次审计约 $0.05–0.10,性价比极高。
本项目采用 Apache License 2.0 开源,可自由用于商业和非商业用途。
本项目参考并引入了 toby-bridges/api-relay-audit(MIT License)的以下设计思想:
- 模块化的检测器架构(Plugin 模式)
- Canary Marker 上下文检测思路
/v1/chat/completions和/v1/messages双格式兼容方案- 7 步审计流程框架
详细归属声明请参阅 NOTICE 文件。