The Ultimate IDOR Testing Checklist (2026 Edition)
IDOR 测试终极清单(2026 版)
Phase 1: Setup & Target Identification
第一阶段:环境设置与目标识别
[ ] Create Test Accounts: Create two accounts (Attacker and Victim) for safe testing of destructive requests (POST/PUT/DELETE).
[ ] 创建测试账户: 创建两个账户(攻击者和受害者),以便安全地测试破坏性请求(POST/PUT/DELETE)。
[ ] API Identification: Find JSON endpoints over rendered HTML.
[ ] API 识别: 优先寻找 JSON 端点,而非渲染后的 HTML。
[ ] ID Audit: Check if endpoint is private or public and contains any kind of ID parameter.
[ ] ID 审计: 检查端点是私有的还是公开的,并确认是否包含任何类型的 ID 参数。
[ ] ID Leakage: Check for IDs leaked via other API endpoints or public pages (public profile pages, listings).
[ ] ID 泄露: 检查是否有 ID 通过其他 API 端点或公共页面(如公开个人资料页、列表页)泄露。
[ ] Map Clients: Collect web/mobile clients, open APIs from decompiled mobile (jadx/apktool), and swagger/openapi if present.
[ ] 映射客户端: 收集 Web/移动端客户端,通过反编译移动端应用(jadx/apktool)获取 API,并检查是否存在 Swagger/OpenAPI 文档。
Phase 2: Direct ID Substitution & Enumeration Technique
第二阶段:直接 ID 替换与枚举技术
Scenario to Test (Attacker ID=10, Victim ID=9)测试场景(攻击者 ID=10,受害者 ID=9)
Basic ID Flip:GET /api/v5/users/10 -> GET /api/v5/users/9基础 ID 翻转:GET /api/v5/users/10 -> GET /api/v5/users/9
Incremental Numeric Brute Force: Loop over sequential numeric IDs (decrement/increment from own ID).
递增数字暴力破解: 遍历连续的数字 ID(从自己的 ID 开始递减/递增)。
Non-Numeric ID Substitution: Replace param with email / username / UUID.
非数字 ID 替换: 将参数替换为电子邮件、用户名或 UUID。
Complex ID Brute Force: Brute force short alphanumeric segments (last 1–4 chars).
复杂 ID 暴力破解: 暴力破解短的字母数字片段(最后 1-4 个字符)。
Predictable ID / Combined ID:/user/2222/data/3333 — change one or both parts.
可预测 ID / 组合 ID:/user/2222/data/3333 — 修改其中一部分或两部分。
Version Downgrading:GET /v3/user/111 -> GET /v1/user/111版本降级:GET /v3/user/111 -> GET /v1/user/111
Sub-Endpoint Variant: Full profile endpoint vs less-protected detail endpoint.
子端点变体: 完整资料端点对比保护较弱的详情端点。
Missing Function Level Access / Case Variants:GET /admin/profile -> GET /Admin/profile功能级访问缺失 / 大小写变体:GET /admin/profile -> GET /Admin/profile
Owner Flag / Role Field Differences: Look for “owner”: true/false, “is_admin”, role fields returned in body and try to toggle via params or token swap.
所有者标志 / 角色字段差异: 查找响应体中的 “owner”: true/false、“is_admin” 等角色字段,并尝试通过参数或令牌交换进行切换。
Token / Authorization Swap: Replace access_token/API key with victim’s or other known tokens to test token-scoped checks.
令牌 / 授权交换: 将 access_token/API 密钥替换为受害者或其他已知令牌,以测试令牌作用域检查。
Cached Role Check / Session Race: Logout/login, change roles, re-test to detect cache-based false-negatives.
缓存角色检查 / 会话竞争: 通过注销/登录、更改角色并重新测试,检测基于缓存的误报。
Token Binding Flaws: Test by reusing a valid token issued for resource A against resource B.
令牌绑定缺陷: 通过将为资源 A 签发的有效令牌用于资源 B 来进行测试。
Frontend–Backend Desync / Logic Mismatch: Test by sending requests with IDs that the frontend never exposes and see if backend performs the action.
前端-后端不同步 / 逻辑不匹配: 发送前端从未暴露的 ID 请求,观察后端是否执行了相应操作。