查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
結果
指定各種限制,將內容層級攻擊所造成的風險降至最低 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 剖析器的結構 使服務當機並誘導應用程式層級的阻斷服務攻擊。所有設定均為 請加以調整,務必採取最適當的服務需求 安全漏洞