您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
結果
您可以針對各種 JSON 結構 (例如陣列和字串) 指定限制,盡量降低內容層級攻擊的風險。
影片:觀看短片,進一步瞭解如何透過 JSONThreatProtection 政策,防範內容層級的攻擊,確保 API 安全。
影片:觀看這部短片,瞭解 Apigee 跨雲端 API 平台。
元素參考資料
元素參考資料說明 JSONThreatProtection 政策的元素和屬性。
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> <DisplayName>JSONThreatProtection 1</DisplayName> <ArrayElementCount>20</ArrayElementCount> <ContainerDepth>10</ContainerDepth> <ObjectEntryCount>15</ObjectEntryCount> <ObjectEntryNameLength>50</ObjectEntryNameLength> <Source>request</Source> <StringValueLength>500</StringValueLength> </JSONThreatProtection>
<JSONThreatProtection> 屬性
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
下表說明所有政策父項元素的共同屬性:
| 屬性 | 說明 | 預設 | 存在必要性 |
|---|---|---|---|
name |
政策的內部名稱。 視需要使用 |
不適用 | 必填 |
continueOnError |
如果設為「 如果設為 |
false | 選用 |
enabled |
如要強制執行政策,請設為 設為 |
true | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName>元素
除 name 屬性外,一併使用
管理 UI Proxy 編輯器,使用不同的自然語言名稱。
<DisplayName>Policy Display Name</DisplayName>
| 預設 |
不適用 如果省略這個元素,政策的 |
|---|---|
| 存在必要性 | 選用 |
| 類型 | 字串 |
<ArrayElementCount> 元素
指定陣列中允許的元素數量上限。
<ArrayElementCount>20</ArrayElementCount>
| 預設值: | 如未指定這個元素,或指定負整數,系統就不會強制執行限制。 |
| 外觀狀態: | 選用 |
| 類型: | 整數 |
<ContainerDepth> 元素
指定允許的最高容器深度,容器可以是物件或陣列。 舉例來說,如果陣列包含物件,而該物件又包含物件,則會產生 3 的包含深度。
<ContainerDepth>10</ContainerDepth>
| 預設值: | 如未指定這個元素,或指定負整數,系統不會強制執行任何限制。 |
| 外觀狀態: | 選用 |
| 類型: | 整數 |
<ObjectEntryCount> 元素
指定物件中允許的項目數量上限。
<ObjectEntryCount>15</ObjectEntryCount>
| 預設值: | 如未指定這個元素,或指定負整數,系統不會強制執行任何限制。 |
| 外觀狀態: | 選用 |
| 類型: | 整數 |
<ObjectEntryNameLength> 元素
指定物件中屬性名稱允許的最大字串長度。
<ObjectEntryNameLength>50</ObjectEntryNameLength>
| 預設值: | 如未指定這個元素,或指定負整數,系統就不會強制執行限制。 |
| 外觀狀態: | 選用 |
| 類型: | 整數 |
<Source> 元素
要篩選的訊息,防範 JSON 酬載攻擊。這項設定最常設為 request,因為您通常需要驗證來自用戶端應用程式的連入要求。如果設為 message,這個元素會自動評估要求訊息 (附加至要求流程時) 和回應訊息 (附加至回應流程時)。
<Source>request</Source>
| 預設值: | 申請。 |
| 外觀狀態: | 選用 |
| 類型: |
字串。 有效值:要求、回應或訊息。 |
<StringValueLength> 元素
指定字串值的長度上限。
<StringValueLength>500</StringValueLength>
| 預設值: | 如未指定這個元素,或指定負整數,系統就不會強制執行限制。 |
| 外觀狀態: | 選用 |
| 類型: | 整數 |
錯誤參考資料
本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤和處理方式 發生錯誤
執行階段錯誤
執行政策時,可能會發生這些錯誤。
| 錯誤程式碼 | HTTP 狀態 | 原因 | 修正 |
|---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed |
500 | JSONThreatProtection 政策可能會擲回許多不同類型的 Execution 失敗錯誤。 這類錯誤大多會在超過政策中設定的特定門檻時發生。這些 錯誤類型包括: 物件項目名稱長度 物件項目數量、 陣列元素數量、 容器深度、 字串值長度。 當酬載包含無效的 JSON 物件時,也會發生這個錯誤。 | build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
如果系統傳回這個錯誤,表示 message
<Source> 元素中指定的變數為以下任一種形式:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
如果 <Source> 元素設為變數,
非類型
訊息。
|
build |
部署錯誤
無。
錯誤變數
當這項政策觸發錯誤時,系統會設定這些變數。詳情請參閱重要須知 政策錯誤。
錯誤回應範例
{
"fault": {
"faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
"detail": {
"errorcode": "steps.jsonthreatprotection.ExecutionFailed"
}
}
}錯誤規則範例
<FaultRule name="JSONThreatProtection Policy Faults">
<Step>
<Name>AM-CustomErrorResponse</Name>
<Condition>(fault.name Matches "ExecutionFailed") </Condition>
</Step>
<Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>
結構定義
使用須知
與 XML 服務一樣,支援 JavaScript 物件標記法 (JSON) 的 API 也容易遭到內容層級攻擊。簡單的 JSON 攻擊會嘗試使用造成 JSON 剖析器超載的結構,藉此導致服務當機,並發起應用程式層級的阻斷服務攻擊。所有設定都是選用項目,應根據服務需求調整,以防潛在的安全性漏洞。