API 契约变异测试器

对 OpenAPI 请求字段做语义变异,并可发送到真实后端以检查防御性校验覆盖率

粘贴 OpenAPI 3.x 文档后,工具会先为每个 operation 生成基准合法请求,再把字段改造成更危险的语义变体,比如删除必填项、填入负数、越界枚举、全空格字符串或特殊字符载荷。

使用方式:

  • OpenAPI 规范:粘贴 YAML 或 JSON
  • 基础 URL:留空则只生成变异计划;填写真实地址则执行请求
  • 执行变异请求:开启后把变异请求真的发给后端
  • 授权头:可填 Bearer token 等原始头值
  • 每字段变异数:限制每个字段生成多少种语义变体
  • 请求超时:控制每次请求最长执行时间

结果解读:

  • defended:后端拒绝了该变异请求
  • accepted:后端仍返回成功状态,说明校验可能不足
  • documented:观测到的状态码是否在 OpenAPI responses 中出现

示例结果

1 个示例

探测注册接口是否真的拒绝危险语义变异

从 OpenAPI 契约生成字段缺失、负数和特殊字符等变异请求,先看后端校验有没有兜住。

{
  "summary": {
    "operations": 1,
    "generatedMutations": 8,
    "executedMutations": 0,
    "acceptedMutations": 0,
    "defendedMutations": 0
  },
  "mutations": [
    {
      "fieldPath": "body.email",
      "mutation": "Inject special characters"
    },
    {
      "fieldPath": "body.age",
      "mutation": "Negative numeric mutation"
    }
  ]
}
查看输入参数
{ "openApiSpec": "openapi: 3.0.3\npaths:\n /users:\n post:\n requestBody:\n required: true\n content:\n application/json:\n schema:\n type: object\n required: [email, role, age]\n properties:\n email: { type: string, minLength: 5 }\n role: { type: string, enum: [admin, member] }\n age: { type: integer, minimum: 18 }\n responses:\n \"201\": { description: created }\n \"400\": { description: invalid }\n", "baseUrl": "", "executeMutations": false, "authorizationHeader": "", "mutationsPerField": 3, "timeoutMs": 8000 }

关键信息

分类
开发与 Web
输入类型
textarea, text, checkbox, number
输出类型
json
样本覆盖
4
支持 API
Yes

概览

API 契约变异测试器是一款专为开发者与测试人员设计的安全与健壮性检测工具。通过解析 OpenAPI 3.x 规范文档,它能自动为接口字段生成缺失必填项、越界数值、特殊字符等危险语义变体。你可以仅生成变异测试计划,或直接将这些异常请求发送至真实后端,快速验证 API 的防御性校验是否完善,提前发现潜在的越权或崩溃风险。

适用场景

  • 在 API 上线前,需要验证后端接口对异常参数(如负数、特殊字符、空值)的拦截能力时。
  • 进行安全审计或渗透测试前,希望自动化生成并执行接口的边界条件测试用例时。
  • 重构旧版后端服务后,需确保新的参数校验逻辑与 OpenAPI 契约定义严格一致时。

工作原理

  • 解析输入的 OpenAPI 3.x YAML 或 JSON 文档,提取所有接口路径、请求体结构及参数校验规则。
  • 基于契约定义生成合法的基准请求,随后对每个字段应用语义变异(如移除必填项、注入非法枚举值或超长字符串)。
  • 如果配置了基础 URL 并开启执行选项,工具会携带指定的授权头,将变异请求并发发送至真实后端。
  • 收集后端响应状态码,比对契约定义,输出测试报告并标记每个变异请求是被成功防御(defended)还是被意外接受(accepted)。

使用场景

自动化生成 API 健壮性测试报告,检查后端是否遗漏了必填项校验或枚举值限制。
在 CI/CD 流程外快速验证某个特定接口的防御性编程覆盖率,无需编写繁琐的测试脚本。
辅助安全团队发现潜在的注入漏洞或因处理异常数据导致的服务器内部错误(500 状态码)。

用户案例

1. 生成用户注册接口的变异测试计划

测试工程师
背景原因
团队刚完成用户注册接口的设计,OpenAPI 文档已就绪,但尚未编写异常测试用例。
解决问题
需要快速列出所有可能的异常参数组合,用于指导后续的测试脚本编写。
如何使用
将注册接口的 OpenAPI YAML 粘贴到规范输入框,保持基础 URL 为空,将每字段变异数设为 3。
示例配置
baseUrl: (空)
executeMutations: false
mutationsPerField: 3
效果
工具输出 JSON 格式的变异计划,列出了针对 email 注入特殊字符、age 传入负数等变异策略,未发送任何真实请求。

2. 验证订单接口的防御性校验

后端开发
背景原因
开发人员为订单创建接口添加了参数校验逻辑,要求商品数量必须大于 0,且状态必须是指定枚举值。
解决问题
需要验证测试环境的后端服务是否真的能拦截非法数量和未知的状态枚举。
如何使用
粘贴 OpenAPI 文档,填写测试环境的基础 URL,勾选“执行变异请求”,并填入测试用的 Bearer Token。
示例配置
baseUrl: https://api.test.com
executeMutations: true
authorizationHeader: Bearer test_token_123
效果
工具向测试环境发送了变异请求。结果显示数量为负数的请求被成功拦截(defended),但传入未知枚举值的请求被意外处理(accepted),提示开发人员修复枚举校验漏洞。

用 Samples 测试

development

相关专题

常见问题

支持哪些版本的 OpenAPI 规范?

目前仅支持 OpenAPI 3.x 版本的 YAML 或 JSON 格式文档,暂不支持 Swagger 2.0。

什么是“被防御 (defended)”和“被接受 (accepted)”?

“被防御”指后端正确识别了异常参数并返回了错误状态码(如 400);“被接受”指后端未拦截异常参数,仍返回了成功状态码(如 200),这通常意味着校验存在漏洞。

工具会自动发送请求修改我的真实数据吗?

只有在填写了“基础 URL”并勾选“执行变异请求”时,工具才会向后端发送真实请求。建议在测试环境或沙盒环境中使用,避免污染生产数据。

如何测试需要登录的接口?

可以在“授权头”字段中填入有效的认证信息,例如 Bearer <token>,工具会在发送真实请求时自动携带该请求头。

为什么有些字段没有生成变异请求?

工具会根据“每字段变异数”限制生成的变体数量。此外,如果没有在 OpenAPI 中明确定义字段的类型或约束,工具可能无法生成针对性的语义变异。

API 文档

请求端点

POST /zh/api/tools/api-contract-mutation-tester

请求参数

参数名 类型 必填 描述
openApiSpec textarea -
baseUrl text -
executeMutations checkbox -
authorizationHeader text -
mutationsPerField number -
timeoutMs number -

响应格式

{
  "key": {...},
  "metadata": {
    "key": "value"
  },
  "error": "Error message (optional)",
  "message": "Notification message (optional)"
}
JSON数据: JSON数据

AI MCP 文档

将此工具添加到您的 MCP 服务器配置中:

{
  "mcpServers": {
    "elysiatools-api-contract-mutation-tester": {
      "name": "api-contract-mutation-tester",
      "description": "对 OpenAPI 请求字段做语义变异,并可发送到真实后端以检查防御性校验覆盖率",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=api-contract-mutation-tester",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

你可以串联多个工具,比如:`https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`,最多20个。

如果遇见问题,请联系我们:[email protected]