產業資訊

資安知識23 分鐘閱讀

API 弱點掃描怎麼做?REST、GraphQL 與 OWASP API Security Top 10 完整指南

API 弱點掃描不能只對 Endpoint 發送 Payload。完整解析資產盤點、認證情境、BOLA、GraphQL、OAuth、資源限制、業務流程濫用、證據與修復複驗。

API 把資料、物件與業務動作直接暴露成可重複呼叫的介面。要有效檢測風險,團隊不能只掃一份 URL 清單,而要先知道有哪些版本與環境、誰能呼叫什麼、每個物件與欄位如何授權、一次請求會消耗多少資源,以及第三方回傳資料如何進入內部系統。這篇指南把 REST、GraphQL、OAuth 與 OWASP API Security Top 10 放進同一套可執行的掃描流程。

API Client 經過身分驗證與授權閘門呼叫 REST 與 GraphQL 服務,伺服器分別檢查物件、欄位、功能與資源限制並阻擋未授權請求
01

先講結論:API 弱點掃描是在驗證信任邊界,不是掃一份 URL

傳統頁面掃描常從 Link、Form 與 JavaScript 找到入口;API 則直接接收結構化資料、物件識別碼、Token、批次操作與狀態轉換。相同 Endpoint 對不同使用者、租戶、角色、Scope、HTTP Method 或物件狀態,可能產生完全不同的安全結果。只用一組帳號跑一次 Crawl,通常只能看到介面的一小部分。

有效的 API 弱點掃描要同時回答五個問題:資產是否完整、Request 是誰送的、他想對哪個物件做什麼、Server 是否只回傳與接受必要欄位,以及這個動作能否被大量或不按順序地濫用。任何一項缺少 Context,掃描器都可能把真正越權判成正常,也可能把預期的 403 或 Business Rule 誤判為弱點。

因此 API Security 是持續流程:以 Inventory 與 Contract 建立可測範圍,用多組最小權限測試身分重播 Request,對物件與欄位做差異驗證,再把結果回到程式碼、Policy、Gateway、監控與修復複驗。一次性工具報告只能提供訊號,不能代表 API 已安全。

  • 先盤點 Host、Base Path、Version、Protocol、Environment、Owner 與資料敏感度
  • 用至少兩個同權限主體、不同租戶與不同角色建立可比較的授權測試矩陣
  • 以 OpenAPI/GraphQL Schema、Client Traffic、Gateway Log 與服務路由交叉補齊 Endpoint
  • 把物件層、欄位層、功能層與業務流程授權分開驗證
  • 所有測試都要有合法授權、速率與副作用控制,以及可重播的修復複驗證據
02

API 弱點掃描與網站頁面掃描有什麼不同?

網站頁面通常帶有可見導覽與 HTML 表單,API 的攻擊面卻可能只存在於 Mobile App、SPA、Partner Integration、Service-to-Service Traffic、Webhook、背景 Job 或已停止公開文件的舊版本。若掃描從首頁開始,沒有 Contract 或真實 Traffic,許多 Endpoint 根本不會被發現。

API Request 也更常帶有 Authorization Header、Tenant Header、JSON Body、GraphQL Operation、Idempotency Key、Signature、Nonce 或 Client Certificate。掃描器若不理解這些前置條件,只會收到 401、403 或格式錯誤;若為了提高覆蓋而使用過度權限 Token,又可能錯過一般使用者的授權差異。

頁面弱掃與 API 弱掃的主要差異
面向網站頁面掃描API 弱點掃描缺少時的盲區
入口發現Link、Form、DOM、JavaScriptContract、Schema、Traffic、Gateway、Client未被 UI 連結的 Endpoint
狀態Cookie 與頁面流程Token、Scope、Tenant、物件與版本跨角色、跨租戶與舊版 API
資料格式HTML、Form、QueryJSON、GraphQL、Multipart、Binary、Event欄位與批次操作
核心風險注入、瀏覽器與頁面設定物件/欄位/功能授權與業務濫用BOLA、BOPLA、BFLA
完成證據Response 與瀏覽器行為Response、狀態變更、後端資料與稽核事件Blind 或非同步結果
03

第一步不是送 Payload,而是建立 API Inventory

OWASP API9:2023 Improper Inventory Management 特別指出,舊版本、Beta Host、測試環境與文件落差會讓較弱的驗證、Rate Limit 或修補狀態繼續暴露。Inventory 不能只有一張 Endpoint 表;至少要記錄 Environment、Version、網路可達性、Owner、Consumer、認證方式、資料分類、部署版本與淘汰日期。

盤點來源要交叉比對。OpenAPI 文件可能比實際部署舊,Gateway 只看得到經過 Gateway 的流量,程式路由不一定包含 Serverless 或第三方 Webhook,DNS 與 Certificate Transparency 只顯示部分外部面。Contract、Gateway、Service Mesh、Source Route、Cloud Inventory、Mobile/Web Client 與外部 Attack Surface 的聯集,才接近真實範圍。

API Inventory 最小必要欄位
欄位要回答的問題證據來源維護觸發點
Host/Base Path/Version實際部署在哪裡?DNS、Gateway、Route、Cloud Inventory部署、DNS、版本變更
Environment/ExposurePublic、Partner 還是 Internal?Firewall、Gateway、Service Mesh網路與存取政策變更
Owner/Repository/Service誰能修、程式在哪裡?CMDB、Catalog、Source Control團隊與服務移轉
Auth/Consumer誰用何種憑證呼叫?Contract、IdP、Client RegistryClient、Scope、驗證變更
Data/Business Criticality處理什麼資料與動作?Data Flow、Privacy Inventory、Threat ModelSchema 與業務流程變更
Lifecycle何時推出、淘汰、最後掃描?Release、Deprecation、Security Record每次 Release 與到期
04

掃描範圍與授權要怎麼定義?

API 測試可能建立帳號、下單、寄送 OTP、呼叫付費服務、上傳檔案、修改資料或觸發非同步 Job。開始前要用書面授權定義 Host、Environment、允許 Method、測試時間、來源 IP、Rate、測試帳號、資料處理、禁止動作、緊急聯絡人與停止條件。第三方 API、Cloud Metadata、Partner Environment 與 Production Data 不會因為從自己的 API 間接呼叫就自動進入授權範圍。

優先在與 Production 控制一致、資料隔離的環境做深度測試;若必須測 Production,使用專用 Tenant、可回收資料、低速率、可辨識 Header、成本上限與即時監控。任何可能造成大量通知、金融交易、庫存變動或不可逆資料刪除的操作,都要先建立替代驗證或明確人工 Gate。

05

OpenAPI、GraphQL Schema 與真實 Traffic 各自提供什麼?

Contract 能描述 Path、Method、Parameter、Request Body、Response Schema 與 Security Scheme,適合建立正向與負向測試;但它不一定包含未文件化路由、Feature Flag、舊版與真實使用順序。真實 Traffic 能補上 Client 實際 Header、Token、狀態與資料組合,卻可能缺少低頻管理功能,且必須去識別化與妥善保護秘密。

GraphQL Schema 能列出 Type、Field、Argument、Query 與 Mutation,但不直接說明每個 Resolver 的授權規則、資料成本或跨欄位關係。安全測試應把 Schema 當作攻擊面地圖,再用不同主體、物件與 Operation 驗證真正的 Resolver 行為。

API 發現資料來源的優勢與限制
來源最適用途主要盲點安全處理
OpenAPI/AsyncAPI結構化產生 Request 與 Contract Test文件漂移、Hidden RouteCI 比對部署與文件
GraphQL SchemaType、Field、Query、Mutation 盤點Resolver 授權與成本限制 Schema 存取並做 Resolver 測試
Client Traffic真實 Header、順序、資料組合低頻功能與未被使用路由移除 Token、PII、Secret
Gateway/Service Log實際 Host、Version、Consumer 與錯誤繞過 Gateway 的路徑最小化敏感內容與 Retention
Source Route未公開與條件式路由部署差異、動態路由對照 Release Artifact
06

先建立身分、角色、租戶與物件的測試矩陣

API 授權弱點需要比較。至少建立兩個同角色使用者 A/B,若有 Multi-Tenant 再建立 Tenant A/B,並準備一般使用者、管理者、唯讀、停用、未驗證與過期 Token 等狀態。每個測試先取得合法 Baseline,再只改一個維度,例如 Object ID、Tenant Header、Field、Method 或 Scope,才能把差異歸因於授權。

不要用單一 Super Admin Token 代表所有覆蓋。它能發現輸入與設定問題,卻不能證明一般角色受到限制。也不要把 JWT Claim 當成授權真相;測試必須觀察 Resource Server 是否以可信 Server-Side Policy 驗證 Actor、Action、Resource、Tenant 與 Context。

API 授權測試矩陣範例
維度合法 Baseline負向變化期待結果
同角色跨物件User A 讀取 A-100User A 讀取 B-200404/403,無資料與副作用
跨租戶Tenant A Token+A ObjectTenant A Token+Tenant B Object拒絕且不洩漏存在性
跨角色功能Admin 執行停用一般 User 執行相同 Method/PathServer-Side 403
欄位更新 displayName加入 role、ownerId、balance拒絕或忽略未授權欄位
狀態Active Order 取消Completed/Other User Order 取消符合狀態機與物件授權
Token正確 aud/scope/tenant錯誤 aud、缺 scope、已撤銷401/403 且不可重播
07

OWASP API Security Top 10 2023 應該怎麼使用?

OWASP API Security Top 10 2023 是教育與風險認知文件,聚焦 API 特有或特別重要的風險。官方也說明,它不取代其他 Top 10,更不會替每個組織完成風險分析;Injection、弱元件等一般應用風險即使不在 API Top 10,仍然存在。

實務上應把十類風險映射到 Inventory、Threat Model、Secure Design、Code Review、Automated Test、Manual Test、Gateway Policy 與 Monitoring,而不是把『掃過 Top 10』當成單一 Checkbox。每一類都要定義適合自己的資產、證據、Owner 與修復 Gate。

OWASP API Security Top 10 2023 與檢測焦點
類別核心風險主要測試軸常見必要證據
API1 BOLA物件層授權失效Actor × Object × Action跨主體重播的差異
API2 Broken Authentication身分與憑證流程失效Token、登入、Recovery、MFA無效/過期/撤銷憑證結果
API3 BOPLA欄位讀寫授權失效Read/Write Field過度回傳或未授權欄位變更
API4 Resource Consumption資源與成本無限制Size、Count、Depth、Concurrency限制、429、Timeout 與成本指標
API5 BFLA功能層授權失效Role × Method × Route低權限呼叫高權限功能
API6 Sensitive Business Flows自動化濫用業務流程Sequence、Volume、Economic Rule業務影響與反濫用控制
API7 SSRFServer 代打非預期目的地URL、Redirect、DNS、Protocol實際 Egress 與 Destination
API8 MisconfigurationAPI Stack 設定不安全TLS、CORS、Error、Method、Debug實際 Response 與部署設定
API9 Inventory舊版與未知資產暴露Host、Version、Environment、Owner部署與 Catalog 差異
API10 Unsafe Consumption過度信任第三方 APITrust、Validation、Redirect、Limit第三方異常輸入的處理
08

API1 BOLA:為什麼換一個 Object ID 就可能越權?

Broken Object Level Authorization 發生在 Endpoint 接收訂單、檔案、帳戶、專案或其他物件識別碼後,沒有驗證目前 Actor 是否能對該物件執行該 Action。ID 是整數、UUID 或無法猜測的字串都不影響授權責任;不可猜測只降低發現機率,不能取代 Server-Side Check。

測試先由 User B 建立物件,再用 User A 的合法 Token 重播相同 Request,只替換 Path、Query、Header、Body 或 Nested Object 中的 ID。讀取、更新、刪除、分享、匯出、下載與子資源都要分開驗證;200 與資料外洩固然是證據,Blind Update、狀態改變或不同 Response Length 也可能證明越權。

BOLA 測試不只更換 URL 中的 ID
識別碼位置測試例需要驗證安全實作
Path/orders/A-100 → B-200讀寫刪除是否跨 Owner以 Actor+Object Query 強制授權
Query?account_id=...Filter 是否越出租戶Server 綁定 Tenant 與 Owner
JSON BodyprojectId/userId/fileIdNested Object 是否授權每個 Target Object 做 Policy Check
HeaderX-Tenant-ID/X-AccountClient 是否能任意切 Tenant從可信身分 Context 取得
GraphQLnode(id:)/Mutation InputNode 與 Edge 是否都授權Resolver/Data Loader 層強制
09

API2 Broken Authentication:Token 驗證不是只看簽章

API 身分驗證涵蓋 Login、Token Issuance、Refresh、Revocation、Password Reset、MFA、API Key、Client Credential 與 Service Identity。JWT 驗證除了 Signature,還要固定 Algorithm、驗證 issuer、audience、expiration、not-before、必要 scope 與 token type;Opaque Token 則要確認狀態、Audience、撤銷與 Cache 行為。

掃描應測試缺少 Token、錯誤 Scheme、格式變異、過期/未生效/撤銷 Token、錯誤 Audience、錯誤 Issuer、Scope 缺少、不同 Client Token、Refresh Token 重播與同一憑證跨服務使用。登入與 Recovery 還要驗證 Rate Limit、帳號枚舉、MFA Bypass、一次性憑證與 Session 輪替。

10

API3 BOPLA:過度回傳與 Mass Assignment 是同一個欄位邊界問題

Broken Object Property Level Authorization 同時包含未授權讀取欄位與未授權修改欄位。API 可能把完整資料模型序列化後交給 Client 自行隱藏,造成 PII、內部狀態、成本、權限或審核欄位過度回傳;也可能直接把 JSON 綁定到 Domain Model,讓 Client 加入 role、ownerId、approved、creditLimit 等不應可寫的欄位。

測試要建立 Read Allowlist 與 Write Allowlist。比較不同角色 Response Schema,檢查 Nested Object、Error、Export、Search、GraphQL Fragment 與批次結果;在 Create/Update/Patch Request 加入敏感、唯讀、未知、Null 與 Nested Field,再從後續 Read、Audit Log 或資料庫狀態確認是否被接受。

欄位層授權的讀寫驗證
方向弱點訊號測試方式修復原則
Read回傳內部或高權限欄位跨角色比較 Schema 與 Value專用 Response DTO+欄位 Allowlist
WriteClient 可改唯讀/高權限欄位加入額外、Nested 與 Null Field專用 Input DTO+Server 指定敏感欄位
GraphQL低權限仍可選取敏感 Field不同角色 Query 相同 FieldField/Resolver Authorization
Patch部分更新繞過驗證JSON Patch/Merge Patch 變體逐 Path Allowlist 與 Domain Rule
11

API4 Unrestricted Resource Consumption:Rate Limit 只是其中一層

API 會消耗 CPU、Memory、Bandwidth、Database Connection、Thread、File Descriptor、Storage,以及 Email、SMS、OCR、AI、Payment 或第三方查詢等按次計費資源。OWASP API4 強調的不只是 Request 速率,也包含單次 Payload Size、Array Length、Page Size、Upload、Batch、GraphQL Depth/Cost、Execution Timeout 與 Concurrent Job。

安全測試採漸進方式,先確認明確限制與 4xx/429,再在核准窗口小幅增加 Size、Count、Depth 或 Concurrency,觀察 Response Time、CPU、Memory、Queue、第三方費用與其他 Tenant 的服務品質。不能用未設上限的壓力測試在 Production『證明』DoS。

API 資源限制應覆蓋的維度
維度測試參數必要控制觀測指標
Request Rate每秒/分鐘/突發User、Client、IP、Tenant 與 Route Bucket429、Retry-After、拒絕率
PayloadBody、String、Array、UploadParser 前 Size Limit 與 Schema BoundMemory、413、處理時間
QueryPage Size、Sort、Filter、JoinMaximum、Timeout、Query CostDB Time、Rows、504
Batch/GraphQLOperation Count、Depth、Alias、ComplexityCount/Depth/Cost LimitResolver Count、CPU
外部成本SMS、Email、AI、PaymentQuota、Budget、Confirmation、Circuit Breaker費用、供應商 Rate、Queue
12

API5 BFLA:能到達 Endpoint 不代表能執行該功能

Broken Function Level Authorization 發生在低權限主體能呼叫管理、審核、匯出、停用、退款或其他高權限功能。常見原因是只在 UI 隱藏按鈕、只以 URL Prefix 保護管理路由、Gateway 與 Service Policy 不一致,或同一路徑的 GET 有檢查但 POST/DELETE 沒有。

測試以 Route × Method × Role 建立矩陣。先由合法管理者取得 Request,再替換成一般使用者、唯讀、其他 Tenant、不同 OAuth Client 或缺少 Scope 的憑證;同時測試 Method Override、Alternate Content-Type、Legacy Version、Batch 與 GraphQL Mutation。

功能層授權驗證
功能合法主體負向主體完成證據
匯出全部客戶具 Export Scope 的管理者一般使用者/其他 Tenant Admin拒絕且無 Export Job/下載檔
退款/核准指定審核角色建立者/唯讀角色狀態、Ledger 與 Audit 均不變
停用帳號User AdminSelf-Service User403 且 Target 仍 Active
管理 MutationAdmin ClientPublic SPA TokenResolver 不執行且無副作用
13

API6 Sensitive Business Flows:技術上合法的 Request 也能傷害業務

搶票、搶購、建立假帳號、刷 Coupon、囤庫存、批量查價、邀請獎勵、內容灌水與 OTP 發送,往往使用合法帳號、合法 Schema 與預期 Endpoint。問題不在單一 Request 是否通過驗證,而在流程是否能被自動化、平行化、重播或繞過順序,造成經濟、資源或公平性影響。

測試要先由產品與風險團隊標出敏感流程、可接受頻率、稀缺資源、前置條件與異常模式,再驗證 Rate、Quota、Device/Account Reputation、Step Binding、Idempotency、Reservation Expiry、Challenge 與人工審查。單純加 IP Rate Limit 容易被分散式來源、帳號農場或不同 Client 繞過。

敏感業務流程的反濫用設計
流程濫用方式單純 Rate Limit 的不足組合控制
購票/下單自動化囤積與並行提交分散帳號與 IPQueue、Identity、Quota、Reservation、Bot Signal
帳號建立批量假帳號低速長時間建立Device、Risk Score、Verification、Velocity
Coupon/Referral自我邀請與循環兌換每 IP 限制無法識別關係Graph、Eligibility、One-Time Rule、Audit
OTP/通知成本與騷擾多帳號打同一目標Target+Actor+Device Limit、Budget、Cooldown
14

API7 SSRF:Webhook、匯入 URL 與預覽服務都是高風險入口

當 API 接收 URL、Hostname、Webhook、Image Fetch、Document Import、Callback 或其他遠端資源位置,再由伺服器發出 Request,就形成 SSRF 攻擊面。攻擊者可能導向 Loopback、Private Network、Cloud Metadata、管理介面,或利用 Redirect、DNS Rebinding、IPv6 與不同表示法繞過字串檢查。

掃描要從輸入到實際 Egress 建立證據,不能只看 Response 是否帶回內容。使用核准的受控測試端點觀察 DNS 與 HTTP Call,測試 Redirect 每一跳、Resolved IP、Scheme、Port、Credential、Timeout、Response Size 與 Network Egress Policy;禁止在未授權情況探測真實內網與 Metadata。

15

API8 Security Misconfiguration:設定可能散落在整條 API Stack

API 設定問題不只在程式。TLS、Gateway、Load Balancer、WAF、CORS、Reverse Proxy、Container、Framework、Error Handler、Cloud Storage 與 Service Mesh 都可能形成暴露。常見訊號包含 Debug/Stack Trace、寬鬆 CORS、未限制 Method、預設帳密、目錄或管理端點、舊 TLS、缺少 Cache Control、過度詳細錯誤與不必要服務。

檢測要比較外部 Response 與實際部署設定,並涵蓋所有 Host、Version 與 Environment。只看 Current Production Gateway 可能漏掉可直接到達的 Origin、Beta Host 或未經同一 Policy 的 Legacy Route。

API Stack 設定檢核
層次檢測項目常見失敗證據
Transport/EdgeTLS、HTTP Method、Request Size舊協定、未限制 MethodHandshake、405/413 與 Edge Config
Browser BoundaryCORS、Cache、Content-TypeWildcard+Credential、敏感 CacheOrigin Matrix 與 Response Header
FrameworkDebug、Error、Parser、Default RouteStack Trace、Prototype/Parser 風險Malformed Request 與 Config
Cloud/RuntimeStorage、Metadata、Admin、SecretPublic Bucket、管理端點暴露Cloud Policy 與 External Reachability
16

API9 Improper Inventory Management:舊版本常是安全控制的旁路

新版本補上 MFA、Rate Limit 或欄位授權,不代表 v1、Beta、Regional Host、Mobile Legacy 或 Partner Endpoint 也同步受保護。攻擊者只要找到仍可到達的舊介面,就可能繞過 Current Version 的防線。版本淘汰要包含流量觀察、Consumer Migration、明確 Sunset、Route Removal、DNS/Certificate 清理與持續外部驗證。

掃描排程要以 Inventory 為來源,每個可到達版本使用相同基準 Control Set。若舊版因相容性無法立即修補,需用 Gateway Policy、Network Restriction、短期監控與明確到期的風險例外,而不是從掃描範圍移除。

17

API10 Unsafe Consumption of APIs:第三方 Response 仍是不可信輸入

內部 API 從支付、物流、地址、身分、AI 或其他 SaaS 收到的資料,不能因供應商品牌或 TLS 就直接信任。第三方可能被入侵、回傳異常格式、惡意內容、巨大 Response、Redirect、延遲或重複事件;若資料再進入 SQL、Template、Command、File、Log 或下游 API,就可能形成二階注入與供應鏈式影響。

測試可用 Mock/Sandbox 模擬錯誤 Schema、額外欄位、惡意字串、超大 Body、慢速 Response、重複/亂序 Webhook、錯誤簽章與 Redirect。系統應驗證 TLS 與目的地、Schema、Signature、Timestamp/Replay、Size、Timeout、Redirect、Idempotency,並以 Circuit Breaker 與隔離 Queue 限制故障。

第三方 API 信任邊界
輸入事件風險必要驗證失敗處理
同步 ResponseSchema/內容/大小惡意Status、Content-Type、Schema、Size拒絕、降級、Circuit Breaker
RedirectCredential/敏感 Body 外洩每跳 Host、Scheme、IP、Policy預設不跟隨或重新授權
Webhook偽造、重播、亂序Signature、Timestamp、Nonce、Event ID去重、隔離、可重試
File/MediaParser 與儲存風險Magic Byte、Size、Sandbox、Re-encode隔離、掃描、拒絕
18

REST API 要怎麼測 Method、狀態碼與 Idempotency?

REST 測試不能只跑文件中的 Happy Path。每個 Resource 要驗證允許的 Method、Content-Type、Accept、Unknown Field、Missing Field、Duplicate Key、Null、Boundary、Pagination、Filter、Sort 與 Conditional Request。未允許 Method 應一致拒絕,不能因 HEAD、OPTIONS、PATCH、Method Override 或不同 Content-Type 進入另一條較弱路徑。

Status Code 要與安全語意一致,但不能把 200/403/404 當作唯一判定。重點是資料與副作用:失敗 Request 是否仍建立 Job、扣款、寄信或更新部分欄位;重試是否因缺少 Idempotency 造成重複交易;Idempotency Key 是否綁定 Actor、Route 與 Request Fingerprint,避免跨使用者重播。

REST 負向測試矩陣
類型變化期待控制副作用確認
MethodGET/POST/PUT/PATCH/DELETE/Override明確 Allowlist 與 405未執行替代 Handler
Content NegotiationJSON/Form/XML/錯誤 MIME只接受核准 Parser無 Parser Smuggling
Idempotency重送、並發、跨 Actor KeyActor+Operation 綁定與保存期限只產生一次業務效果
Pagination負值、極大值、Cursor 竄改Bound、簽章或 Server Cursor不越權、不耗盡資源
ConditionalETag/If-Match 缺失或舊值避免 Lost Update衝突不覆寫新資料
19

GraphQL API 要測 Depth、Cost、Batching 與 Resolver 授權

GraphQL 只有一個 HTTP Endpoint,不代表攻擊面更小。攻擊面存在於 Query、Mutation、Subscription、Type、Field、Argument、Resolver、Interface、Union、Alias、Fragment、Batch 與 Data Loader。OWASP 建議驗證輸入、限制昂貴 Query、對資料與 Mutation 強制存取控制,並關閉不必要的 GraphiQL、過度 Error 與公開 Introspection。

資源測試要同時看 Depth、Breadth、Alias、Fragment Expansion、List Cardinality、Nested Pagination、Batch Operation 與實際 Resolver Cost。只限制 Depth 可能被同層大量 Alias 繞過;只做 Rate Limit 可能允許一個 Request 包含數百次昂貴 Resolver。授權則要在 Node 與 Edge、Query 與 Mutation、Parent 與 Child Field 都執行。

GraphQL 專屬測試面
測試面攻擊變化安全控制量測
Depth深層循環關聯最大 Depth+CostResolver Count、DB Query
Breadth/Alias同層大量欄位與別名Field/Alias/Complexity LimitCPU、Response Size
Batching一個 Request 多 OperationBatch Count、Auth、Rate 分攤每 Operation 結果與成本
Field Authorization低權限選敏感 FieldResolver/Policy 層檢查不同角色 Schema/Value 差異
Introspection/ErrorsSchema 探索與欄位猜測依需求限制、Production Error 最小化未洩漏 Internal Type/Stack
20

OAuth 與 Bearer Token 應該怎麼檢測?

OAuth 把 Authorization Server、Client 與 Resource Server 分開。Resource Server 必須驗證 Token 是由可信 Issuer 發出、Audience 指向自己、Scope 足以執行當下 Action,並區分 Access Token、ID Token 與其他 Token Type。不能只因 JWT 簽章有效就接受,也不能讓同一 Token 在所有 API 通用。

RFC 9700 整理 OAuth 2.0 現行安全最佳實務,包括避免不安全流程、嚴格 Redirect URI、PKCE、最小權限 Token,以及對 Public Client 的 Refresh Token 使用 Sender-Constrained 或 Rotation 來偵測重播。測試要驗證 Authorization Code 綁定 Client/Redirect/PKCE,Access Token 的 iss/aud/scope/exp,以及 Refresh Token Rotation、Family Revocation 與 Concurrent Refresh。

OAuth API 測試重點
元件負向測試期待結果高風險失敗
Authorization RequestRedirect 變體、缺 PKCE、State 混淆精確比對與流程拒絕Code/Token 被導向攻擊者
Access Token錯 iss/aud/scope/type/expResource Server 拒絕跨 API 或過期 Token 可用
Refresh Token舊 Token 重播、並行 Rotation偵測重播並撤銷 Family長期 Session 被接管
ClientPublic Client Secret、錯 Client Binding依 Client Type 使用正確控制Secret 被反編譯或 Token 混用
21

Rate Limit 要綁誰、限制什麼,才不會一繞就過?

單一 IP Limit 無法涵蓋 NAT、Proxy、IPv6、Botnet 與已登入帳號;單一 User Limit 也可能讓攻擊者用帳號農場濫用。應依風險組合 Actor、Client、Tenant、Target、Device、IP、Route、Operation 與成本單位,並區分平常速率、短期 Burst、Concurrent Request、每日 Quota 與昂貴操作 Budget。

429 與 Retry-After 要一致,Gateway 與 Service 不能各自使用互相矛盾的 Key。安全測試要確認 Header/Forwarded IP 不能由外部偽造繞過、分散節點共享狀態、不同 API Version 套用相同策略,以及拒絕後沒有先執行昂貴工作。

Rate Limit Key 與目的
Key適合限制單獨使用的弱點應搭配
IP/Network匿名掃描與粗粒度 BurstNAT 誤傷、Botnet 繞過Device、Route、Challenge
User/Account登入後操作與 Recovery帳號農場、帳號被害Target、Device、Risk
Client/API KeyPartner 與應用配額Key 外洩或共享User、Scope、Quota、Revocation
Tenant避免單一租戶耗盡共享資源Tenant 內惡意使用者User、Route、Cost
Target/Business ObjectOTP、Invite、Coupon、受害目標分散 Actor 攻擊同目標Actor、Time Window、Fraud Signal
22

錯誤訊息、Response 與 Log 不能洩漏什麼?

API Error 應提供 Client 可處理的穩定 Code 與 Correlation ID,但不應回傳 Stack Trace、SQL、Internal Host、File Path、Secret、Token、完整物件、存在性差異或未授權欄位。Authentication 與 Authorization 的錯誤差異要兼顧可觀測性與資訊洩漏,詳細原因留在受保護的 Server Log。

Log 也不能直接記錄 Authorization Header、Session ID、API Key、Password、OTP、Private Key、完整 Cookie 或敏感 Payload。可用 HMAC/不可逆 Fingerprint 關聯 Token 生命週期,記錄 Actor、Tenant、Route、Decision、Reason、Object 類型、風險訊號與 Trace ID,並限制存取與保存期限。

23

API 業務邏輯與狀態機要怎麼測?

許多高衝擊問題不屬於單一 Payload,而是順序錯誤:未付款先出貨、已退款再次退款、取消後仍下載、未完成驗證就升級、同一邀請重複領取、並發 Request 造成重複扣款。掃描要把每個流程建成 State Machine,列出允許的 Transition、Actor、前置條件、次數、金額與不可變條件。

對每條合法 Transition 建立 Baseline,再測試跳步、倒序、重播、平行、過期、跨 Actor、跨 Tenant、負數/邊界值與 Client-Supplied State。完成證據來自最終狀態、Ledger、Inventory、Message、Audit Event 與對外副作用,不是單看某一次 Response。

狀態機安全測試
測試例子必要控制證據
跳步未驗證直接完成敏感操作Server 驗證前置狀態狀態未改變
重播同 Payment/Coupon 重送Idempotency+唯一業務約束只產生一次效果
並發兩次同時扣庫存/退款Atomic/Lock/Version CheckInvariant 保持
跨 ActorA 完成 B 的流程Transition 層物件授權Owner 與 Audit 正確
Client State自行提交 approved/priceServer 計算與可信資料來源敏感值不可由 Client 覆寫
24

自動化 DAST 能覆蓋哪些 API 問題?

有 Contract、可用憑證與安全測試資料時,自動化工具很適合做 Endpoint 發現、Schema 邊界、Injection Payload、Header/CORS/TLS 設定、已知 Pattern、Method、Content-Type、部分 BOLA 差異、Rate Limit 訊號與修復回歸。它能以固定頻率對相同資產產生一致證據。

但工具通常不知道『A 是否應看 B 的訂單』、『一張票最多能買幾張』、『這次退款是否符合業務條件』,也無法獨立確認所有 GraphQL Resolver、非同步副作用、第三方成本與組織允許的風險。這些需要 Threat Model、Contract Test、程式碼審查、人工測試與業務 Owner 判斷。

API 自動化掃描覆蓋判斷
問題自動化適合度必要輸入需要補強
Schema/Injection/Misconfiguration高Contract、Traffic、Auth程式碼與部署設定
BOLA/BFLA/BOPLA中多主體、多物件、期待 Policy人工授權矩陣與資料驗證
GraphQL Cost/Resource中Schema、Cost Model、監控受控壓力與後端指標
Sensitive Business Flow低至中流程、規則、經濟限制產品/風險專家與濫用測試
第三方 API 與非同步事件中Mock、Webhook、Queue Evidence整合測試與供應商治理
25

Authenticated API Scan 怎麼避免只拿到一堆 401?

掃描器需要可自動更新的測試憑證與明確最小權限。短效 Access Token 可透過受控 Test Client 或預掃描 Login Flow 取得;Service API 可使用專用 Client Credential;需要 MFA 的流程則以測試 IdP、受控 Automation 或人工 Gate 處理,不能把長效 Production Token 硬編碼在設定檔。

同一 Scan Job 依角色與 Tenant 分開執行,並使用獨立資料 Seed。Token 過期時應安全刷新,不把 Refresh Token 寫進 Report 或 Log;掃描結束後撤銷 Credential。Coverage 不是看到 2xx 的比例,而是每個 Endpoint/Method/Role/Object 狀態都有可重播 Baseline 與負向測試。

Authenticated Scan 的憑證治理
項目安全做法禁止做法驗證
取得Test IdP/短效 Client/受控 Login人工複製長效 TokenIssuer、aud、scope、ttl
儲存Secret Manager、執行期注入Repo、Report、CLI History掃描 Secret Detection
權限每角色最小 Scope 與 Tenant共用 Super AdminRole/Scope Coverage
生命週期自動更新、結束即撤銷永久 KeyRevocation Replay 失敗
資料專用 Tenant、可回收 Seed真實客戶資料Cleanup 與 Audit
26

一套可稽核的 API 弱點掃描流程

流程從 Inventory 與合法授權開始,將 Contract、Schema、Client Traffic、Gateway 與 Source Route 合併成 Endpoint Catalog;接著建立身份與資料 Seed,取得每個 Role 的合法 Baseline,再逐一變更 Object、Field、Function、Token、State 與 Resource Dimension。每次測試都保留 Sanitized Request、Response、Actor、Target、Time 與後端副作用證據。

結果進入技術驗證時,要重播最小 Case、排除 Cache/Race/測試資料污染,映射 OWASP API Category、CWE、Asset Criticality 與 Business Impact。修復後以原 Request 複驗,並跑正常 Client Contract/Regression Test,確認不是把 200 一律改成 403 或破壞既有整合。

API 掃描八階段交付物
階段主要活動交付物完成條件
1. Inventory合併 Host、Version、Contract、Traffic可追溯 Asset CatalogOwner 與 Exposure 完整
2. Scope授權、Rate、副作用與停止條件測試計畫所有利害關係人核准
3. Identity/Data建立角色、租戶、物件與狀態Test Matrix/Seed合法 Baseline 可重播
4. DiscoveryContract、Schema、Crawl、TrafficEndpoint/Operation Catalog文件與部署差異已標記
5. Negative TestObject、Field、Function、Flow、ResourceRequest/Response/Effect Evidence每個 Risk Axis 有覆蓋
6. Validation最小重播、人工與後端確認Confirmed Finding誤報與限制清楚
7. RemediationPolicy、Code、Gateway、MonitoringFix+Regression根因而非單一 URL 修復
8. Retest原 Case+同類回歸+正常流程Closure Evidence攻擊失敗、合法 Client 正常
API 弱點掃描從資產與 Contract 盤點開始,建立多角色多租戶測試矩陣,再驗證物件、欄位、功能、流程與資源限制,最後產出證據、修復與複驗
API 弱點掃描不是單一路徑:Inventory、Authenticated Baseline、Authorization Matrix、Resource Control、Evidence 與 Retest 必須形成閉環。
27

Production API 掃描如何控制風險?

Production 測試不應直接複製 Staging 的強度。使用明確識別的 Source、Header、User Agent、Test Tenant 與 Test Data,限制 Request Rate、Concurrency、Payload、Upload、Batch、GraphQL Cost 與外部費用。建立 Dashboard 觀察 Error Rate、Latency、CPU、DB、Queue、Third-Party Call 與告警,達到門檻立即停止。

對 Delete、Payment、Refund、Notification、Account Lock、Export、Webhook 與付費 API 使用 Dry Run、Sandbox、Mock、Feature Flag 或人工核准。掃描窗口結束要清理資料、撤銷 Token、確認 Queue 與 Job 沒有殘留,並保存 Scan ID 與 Change/Incident 關聯。

28

API Security 要怎麼進 CI/CD,而不是只在上線後掃?

在 Pull Request 階段檢查 Contract Diff、Security Scheme、敏感欄位、無上限 Array/Page Size、未授權 Route 與 Schema Breaking Change;在 Integration Environment 用多角色 Contract Test 驗證 401/403、BOLA、BOPLA、BFLA、Idempotency 與 GraphQL Cost;部署後再由外部 DAST 驗證真實 Gateway、DNS、TLS、CORS 與可到達版本。

Gate 必須以可行動的風險條件決定,而非任何 Scanner Finding 都阻擋。Confirmed Critical/High、核心授權回歸、敏感資料暴露與未核准 Public API 可直接停止;其餘依 SLA、Owner、資產與證據管理。Contract、Test、Inventory、Finding 與 Release 應共享 Service/Version Identifier。

API Security Delivery Gate
階段自動化檢查阻擋條件保留證據
Design/ContractSchema Lint、Threat Model、Auth Annotation敏感 Route 無 Security/OwnerContract Diff、Decision
Unit/ComponentPolicy、Validator、Serializer、Cost Test授權/欄位/Bound Test 失敗Test Result、Coverage
Integration多角色、多租戶、狀態機、OAuthConfirmed Authorization RegressionRequest/Response/State
DeployInventory Diff、External DAST、Config未知 Public API、Critical FindingAsset/Release/Scan ID
RuntimeAbuse、Rate、Auth、Egress、Drift異常超過門檻Metric、Trace、Incident
29

API 弱點報告要包含哪些證據才可修?

報告應讓 Owner 在不接觸真實客戶秘密的前提下重現問題。最小欄位包含 Asset/Version、Endpoint/Operation、Actor/Role/Tenant、前置資料、Sanitized Request、Baseline 與 Negative Response、實際資料或狀態差異、OWASP API Category、CWE、Business Impact、修復方向與 Retest Condition。

BOLA 不能只寫『更換 ID 可存取』,要說明 A/B 身分、物件 Ownership、被讀或被改的欄位與後續狀態;Resource Consumption 不能只貼 Timeout,要提供合法限制、測試增量、Server Metric 與停止點;Business Flow Abuse 則要由產品 Owner 確認經濟與流程影響。

30

修復 API 弱點時,為什麼不能只封鎖一個 Payload?

封鎖某個 ID、字串、User Agent 或單一路徑,只會修掉掃描樣本。BOLA 的根因通常是 Domain Query 或 Policy 沒有綁 Actor;BOPLA 是 Serializer/Binder 沒有欄位 Allowlist;BFLA 是功能 Policy 漏套 Method;Resource Risk 是 Cost Model 與 Bound 缺失;Business Abuse 則需要流程與經濟控制。修復應放在可被所有版本與入口一致重用的 Enforcement Point。

複驗先重播原 Case,再擴展到同 Controller、同 Object Type、同 Resolver、其他 Method、Batch、Legacy Version 與不同角色,確認不是局部 Patch。最後跑合法 Client、Partner Contract、Mobile Legacy、Performance 與 Error Handling Regression,避免安全修復造成無聲整合故障。

從 Finding 回到根因修復
Finding脆弱的局部修補根因修復回歸範圍
BOLA封鎖特定 ID每次資料存取強制 Actor+Object Policy所有 CRUD、子資源、Batch
BOPLA移除一個欄位Read/Write DTO Allowlist+Policy所有角色、Export、GraphQL
BFLA封鎖一條 URLRoute/Action Policy Default DenyMethod、Version、Admin/Partner
Resource封鎖單一 PayloadParser Bound+Cost+Quota+TimeoutSize、Depth、Count、Concurrency
Business Abuse加 IP Limit流程、身份、Target、Velocity 與風險控制分散 Actor、重播、並發
31

修復後複驗要證明哪些事?

第一,原攻擊 Request 在相同 Actor、Object、Token 與狀態下必須失敗;第二,失敗不能留下資料、Job、Message、費用或部分更新;第三,同類入口與版本也受到相同控制;第四,合法 Owner、Admin、Partner 與 Mobile Client 仍能依 Contract 正常運作;第五,Log 與 Alert 能記錄被拒絕事件而不洩漏秘密。

對 Race、Idempotency、Refresh Rotation 與非同步流程,單次重播不足以結案,需重現並發與時間條件。對 Rate/Cost 類問題,要用核准增量測試證明 Limit 在昂貴工作前生效,且不會讓一個 Tenant 影響其他租戶。Closure Evidence 應綁定修復 Version 與部署 Artifact。

32

API Security 的最小可行導入路線圖

先不要從購買最多工具開始。第一階段建立所有 Public/Partner API 的 Inventory、Owner、Contract、資料分類與認證方式,先關閉未知 Host 與舊版本;第二階段為高價值 API 建立多角色授權矩陣、資源限制與業務流程 Threat Model;第三階段把 Contract、Policy Test、Authenticated DAST、Runtime Detection 與修復複驗接進 Release。

成熟後擴展到 Internal/Service API、GraphQL、Webhook、第三方 Consumption 與跨服務 Identity,建立統一的 Policy Library、Token Profile、Rate/Cost Model、Secure Logging 與 Exception Workflow。衡量 Coverage 時,使用 Asset、Operation、Role、Risk Axis、Verified Finding、Remediation Time 與 Retest Closure,不用單一『掃描完成率』。

90 天 API Security 推進順序
期間主要目標優先交付物成功指標
0–30 天看見攻擊面Public/Partner Inventory、Owner、Contract、Exposure未知與無 Owner API 下降
31–60 天建立可測信任邊界角色/租戶/物件矩陣、Test Data、Top Risk Baseline高價值 Operation 有負向測試
61–90 天形成持續閉環CI Gate、Authenticated DAST、Runtime Signal、RetestConfirmed Risk 有 Owner、SLA 與 Closure
持續涵蓋變更與新架構GraphQL、Webhook、Service Identity、Third PartyRelease 與 Inventory/Test 同步
33

API 弱點掃描最終檢查清單

掃描前,確認所有 Host、Version、Environment、Owner、Contract、資料分類、第三方依賴與合法授權;確認每個角色、Tenant、Object 與狀態都有專用測試資料與最小權限憑證。掃描中,除了 Injection 與設定,也要覆蓋 Object、Field、Function、Business Flow、Resource、Token、GraphQL 與第三方 Trust Boundary。

掃描後,所有 Finding 都有 Sanitized Evidence、Business Context、根因 Owner、SLA 與 Retest Condition;所有 Token 與測試資料已撤銷或清理;修復複驗同時證明攻擊失敗與合法 Client 正常。若這些條件沒有完成,就只能說某個工具執行過,不能說 API Security 已被驗證。

  • Inventory 與實際部署、Gateway、Client Traffic、Contract 相符,舊版與 Beta 也在範圍內
  • 至少有同角色雙主體、跨租戶、跨角色、過期/撤銷 Token 與關鍵狀態資料
  • BOLA、BOPLA、BFLA、Business Flow、Resource、SSRF、Misconfiguration 與 Third-Party Trust 均有證據
  • REST Method/Idempotency 與 GraphQL Depth/Cost/Batch/Resolver Authorization 已驗證
  • Production 測試有速率、副作用、成本、監控、停止與清理控制
  • 修復以根因與共用 Enforcement Point 完成,原 Case、同類入口與合法 Client 均通過複驗
REF

資料來源

Redmark Editorial
START WITH ONE WEBSITE

從第一個網站開始,建立持續弱掃流程

以更低的執行成本持續檢測網站弱點,更早發現問題,也讓每一次修復都有清楚的方向。

免費開始掃描