API 安全检查停在“令牌有效”还不够。令牌属于谁、能执行什么动作、能访问哪个资源,以及失败响应泄露了什么,都是接口边界的一部分。

为什么需要这个 Skill

API 安全测试 Skill 先用文档、权限矩阵、API 合同和脱敏证据建立受限分析,再把需要授权执行的验证写成 AST-## 发现。它不会登录系统、读取凭据或自动攻击真实 API;即使名称包含“测试”,也仍受证据和授权边界约束。

Skill 用来做什么

当团队需要复核 API 攻击面、输入边界、认证、授权、对象范围、错误泄露、限流和安全合同时,使用这个 Skill。它尤其适合下面这些场景:

  • 令牌能通过认证,但还没有确认它能否访问当前对象。
  • OpenAPI、权限矩阵和安全需求对同一接口说法不一致。
  • 团队需要把“检查越权”和“检查敏感信息泄露”变成有触发条件、预期结果和证据要求的场景。
  • 交接时必须说明哪些内容只是静态审查,哪些内容还没有授权执行。

API 安全复核会沿着一次请求追踪完整对象边界:调用者是谁、请求了什么、对象属于谁、失败时返回什么、系统记录了什么。它不把一次 403 或一份 OpenAPI 文档写成全面安全证明。

它不做什么

API 安全测试 Skill 不替代:

  • 渗透测试、红队行动和漏洞扫描;
  • 真实 API 的未授权调用或生产探测;
  • 安全需求复核、威胁建模和权限设计;
  • 风险接受、例外授权和发布安全判断;
  • 一次请求之外的完整运行时安全保证。

它把安全测试准备成可以授权、执行和复核的工作,不把准备过程伪装成测试结果。

它主要检查哪些内容

API 安全测试的核心不是多列几个攻击名,而是把请求边界拆成可验证的安全问题。

复核维度重点问题
认证调用者是谁?令牌的来源、租户和生命周期是什么?
授权这个角色能执行当前动作吗?
对象授权它能操作这个具体资源吗?资源是否属于另一个租户?
输入边界参数、路径、查询、上传和批量输入的攻击面在哪里?
响应与错误失败时是否泄露对象存在性、内部字段、堆栈或敏感数据?
限流与滥用重复、批量、异常频率和资源消耗如何处理?
审计安全相关动作是否有可定位、不过度泄露的记录?
安全合同认证、权限、错误、数据和版本要求能否追踪到验证证据?

开始之前先审计输入

API 安全分析不能把请求样例当成真实执行结果。先做输入审计:

状态例子应该怎么做
knownAPI 合同明确要求导出接口校验租户身份引用接口和版本
missing没有对象权限矩阵,也没有错误响应规范记录证据缺口
conflictingOpenAPI 允许 404,安全需求要求 403保留两份来源并请求决策
stale请求样例仍使用旧版本令牌或字段标记时效风险
out_of_scope未授权登录、调用生产 API 或读取凭据明确禁止真实执行
assumptions暂时假设测试环境使用合成租户和对象写出影响并要求确认

信息缺失时,可以继续准备候选场景;不能把请求模板发出去以后就说攻击已经完成。

从问题到结构化发现

先把来源、范围、证据状态、分析判断、责任角色、动作、关闭条件和验证方式连起来,再写结论。下面的案例保留这个 Skill 的专属编号和领域语境。

结构化发现至少要区分事实、证据支持的推断、建议和人工决策。它们对应不同的证据强度和责任边界。

判断层次记录什么示例
事实材料直接说明了什么接口接受令牌和 job_id
证据支持的推断哪个缺口可能造成什么风险尚无租户绑定规则,可能无法确认对象授权是否生效;这不是漏洞确认
建议接下来最小且安全的动作补充租户绑定、错误语义和审计要求,再设计合成数据验证
Human 决策哪些事项需要授权或权衡由负责人确认环境、账号范围和错误信息取舍

一个完整案例

本节按输入、分析、发现、决策和验证展开;材料不足时保留 missing、conflicting 或 assumptions 状态,不把它们改写成通过。

输入

本案例使用本节给出的需求、设计、接口或其他项目材料,并保留版本、范围和缺失项。

分析

先对照检查矩阵和六类证据状态,再把问题整理成这个 Skill 的专属发现。

发现

一条 AST-## 发现如何产生

假设接口合同提供:

GET `/exports/{job_id}/download`
Authorization: Bearer <token>

材料没有说明 job_id 与租户身份如何绑定,也没有说明跨租户资源返回 403 还是 404、失败响应是否允许泄露对象存在性。

AST-02 — 下载接口缺少对象授权和错误泄露合同
  • 对象 / 规则: GET /exports/{job_id}/download 的租户对象访问。
  • 来源: API 合同 v3.2;令牌说明存在,但对象权限矩阵和错误响应规范未提供。
  • 触发条件: 租户 A 的合法身份请求租户 B 的 job_id,以及请求不存在或已过期的 job_id。
  • 预期关注点: 认证成功不等于对象授权成功;跨租户、不存在和已过期资源是否有一致且不过度泄露的响应。
  • 状态: missing
  • 影响 / 优先级: 缺少合同可能让 API、网关、审计和客户端对失败语义采用不同实现;示例没有提供项目的影响评估或定级依据,因此暂不定级。
  • 责任角色: API 负责人、安全负责人、租户权限负责人。
  • 关闭条件: 明确对象授权位置、跨租户响应策略、审计字段和敏感错误信息边界,并更新 API 合同。
  • 验证方式: 在授权的隔离环境使用合成租户和文件,验证合法对象、跨租户对象、不存在对象和过期对象;保留原始响应、审计记录和停止条件。
  • 人工决策: 选择 403、404 或统一错误策略时,需要评估安全、客户端兼容性和可观测性的取舍。

这个发现没有声称接口已经存在漏洞。它说明当前材料不足以形成可复核的对象授权验证——这正是 API 安全测试应该先解决的问题。

决策

责任角色和待决策问题应由对应负责人确认;Skill 不替他们做风险取舍。

验证

关闭前按发现中的验证方式执行,并保留原始产物;没有执行记录时,状态仍然保持未验证。

发现如何进入下一阶段

交接产物

至少交付来源、证据状态、负责人、关闭条件和验证动作;路由结果仍需由负责人确认。

下一步路由

一轮 API 安全工作可以分成两段:

  1. 用 API 合同、权限矩阵和脱敏请求做静态输入审计。
  2. 产出 AST-## 场景,包括前置条件、刺激、预期结果、证据和停止条件。
  3. 由负责人确认环境、账号、数据和授权范围。
  4. 在隔离环境使用最小权限和合成数据执行。
  5. 单独记录实际响应、审计日志、版本、时间和剩余风险。

Skill 可以准备第四步需要什么,但不会代替第四步。尤其不能因为请求返回 403,就自动推断所有对象和所有入口都受到保护。

怎样准备更好的输入

最小输入包括:

  • OpenAPI 或 API 合同、版本、接口范围和错误响应规范;
  • 认证方式、角色/租户/对象权限矩阵;
  • 输入字段、数据分类、限流策略、审计字段和依赖;
  • 脱敏请求/响应样例、历史问题和已有执行证据;
  • 授权的隔离环境、合成数据、账号范围和停止条件。

输出至少包括:

  • 目标、对象、范围内外和未授权动作;
  • 六类输入审计;
  • API 攻击面和安全风险场景;
  • 按优先级排序的 AST-## 发现;
  • 候选验证、预期结果、证据要求、关闭条件和人工决策。

只有接口名称时,Skill 可以提示需要什么材料;要得到有用的对象授权结果,至少提供对象关系、角色边界和错误合同。

和其他 Skill 怎么配合

容易踩的坑

  1. 把令牌有效写成“用户可以访问这个资源”。
  2. 只测试 UI,不检查直接 API、批量接口、后台任务和下载链接。
  3. 把 403 当成所有对象都安全,也不检查 404/错误响应是否泄露对象存在性。
  4. 只列 SQL 注入、越权等攻击名,不写触发条件、预期结果和证据。
  5. 使用真实凭据或生产接口来补全缺失材料。

安装与调用

npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh --skill api-security-testing

安装说明与排查方式:

请使用 api-security-testing Skill。

任务:在授权的隔离环境前,复核发票导出 API 的对象授权和错误泄露风险。
输入材料:[OpenAPI v3.2、租户权限矩阵、Token 说明、错误响应规范、审计字段和脱敏请求]
范围:[GET /exports/{job_id}/download]
限制:[不读取凭据、不调用生产 API、不执行破坏性操作]

先完成六类输入审计,再围绕认证、授权、对象范围、输入边界、错误泄露、限流和审计输出 AST-##。分开静态事实、证据推断、候选验证和 Human 决策。

输入是 API 合同、权限和脱敏证据;输出是带来源、状态、优先级、预期结果、关闭条件和验证方法的安全发现。真实执行需要单独授权和单独证据。

常见问题

返回 403 就能证明资源受保护吗?

不能。它只说明一次特定请求得到了 403。还要确认使用的身份、对象归属、版本、其他入口、错误响应和审计记录。

这个 Skill 会直接执行攻击吗?

不会。它只做证据受限的分析和验证准备,不登录系统、不读取凭据、不调用真实 API,也不执行破坏性操作。

只有 OpenAPI 文档,能得到完整的 API 安全结论吗?

不能。你可以得到静态合同和证据缺口分析,但对象权限、环境行为和运行时安全仍然是未验证状态。

参考

静态 API 合同、请求模板和空跑只能保留计划或材料证据,不能升级为真实攻击、漏洞不存在或发布批准。

分享