このページは Apigee と Apigee ハイブリッドに適用されます。
  Apigee Edge のドキュメントを表示する。
  
      
 
  
内容
配列や文字列など JSON のさまざまな構造に制限を指定して、内容レベルの攻撃によるリスクを最小限に抑えます。
このポリシーは拡張可能なポリシーです。Apigee ライセンスによっては、このポリシーの使用によって費用や使用量に影響する場合があります。ポリシータイプと使用量への影響については、ポリシータイプをご覧ください。
動画: 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 | 
        
           ポリシーの内部名。 管理 UI プロキシ エディタで   | 
        なし | 必須 | 
continueOnError | 
        
           ポリシーが失敗したときにエラーを返す場合は、 ポリシーが失敗した後もフローの実行を続行する場合は、  | 
        false | 省略可 | 
enabled | 
        
           ポリシーを適用するには、 ポリシーを無効にするには、  | 
        true | 省略可 | 
async | 
        
           この属性は非推奨となりました。  | 
        false | 非推奨 | 
<DisplayName> 要素
管理 UI プロキシ エディタで name 属性と一緒に使用して、ポリシーのラベルに使用する自然言語名を指定します。
<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>
| デフォルト: | request | 
| 要否: | 省略可 | 
| 型: | 
           文字列。 (有効な値は、request、response、message)  | 
      
<StringValueLength> 要素
文字列の最大長を指定します。
<StringValueLength>500</StringValueLength>
| デフォルト: | この要素を指定しないか、負の整数を指定した場合、システムは制限を適用しません。 | 
| 要否: | 省略可 | 
| 型: | 整数 | 
エラー リファレンス
このセクションでは、このポリシーによってエラーがトリガーされたときに返される障害コードとエラー メッセージ、Apigee によって設定される障害変数について説明します。これは、障害に対処する障害ルールを作成するうえで重要な情報です。詳細については、ポリシーエラーについて知っておくべきことと障害の処理をご覧ください。
ランタイム エラー
このエラーは、ポリシーの実行時に発生することがあります。
| 障害コード | HTTP ステータス | 原因 | 修正 | 
|---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed | 
        500 | 
        
          JSONThreatProtection ポリシーは、さまざまな種類の ExecutionFailed エラーをスローできます。エラーのほとんどは、ポリシーで設定された特定のしきい値を超えた場合に発生します。これらのエラーには、オブジェクト エントリ名の長さ、オブジェクト エントリ数、配列要素数、コンテナの深さ、文字列値の長さなどがあります。このエラーは、ペイロードに無効な JSON オブジェクトが含まれている場合にも発生します。 | 
        build | 
steps.jsonthreatprotection.SourceUnavailable | 
        500 | 
        
          このエラーは、<Source> 要素で指定された メッセージ変数が次のいずれかである場合に発生します。
  | 
        build | 
steps.jsonthreatprotection.NonMessageVariable | 
        500 | 
        
          このエラーは、<Source> 要素がメッセージ型以外の変数に設定されている場合に発生します。 | 
        build | 
デプロイエラー
なし。
障害変数
このポリシーがエラーをトリガーした場合は、次の変数が設定されます。詳細については、ポリシーエラーについて知っておくべきことをご覧ください。
| 変数 | 説明 | 例 | 
|---|---|---|
fault.name="fault_name" | 
        fault_name は、上記のランタイム エラーの表に記載されている障害の名前です。障害名は、障害コードの最後の部分です。 | fault.name Matches "SourceUnavailable" | 
      
jsonattack.policy_name.failed | 
        policy_name は、障害が発生したポリシーのユーザー指定の名前です。 | jsonattack.JTP-SecureRequest.failed = true | 
      
エラー レスポンスの例
{
  "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 ベースのサービスのように、JSON(JavaScript オブジェクト記法)をサポートする API は、内容レベルの攻撃に脆弱です。単純な JSON 攻撃では、JSON パーサーに過剰な負荷をかけてサービスをクラッシュさせ、アプリケーション レベルの DoS 攻撃となるような構造を使おうと試みます。すべての設定はオプションであり、潜在的な脆弱性に対するサービス要件を最適化するよう調整する必要があります。
関連トピック
RegularExpressionProtection ポリシー