JSONThreatProtection ポリシー

概要

配列や文字列など JSON のさまざまな構造に制限を指定して、内容レベルの攻撃によるリスクを最小限に抑えます。

動画: コンテンツレベルの攻撃に対して API を保護する JSON Thread Protection ポリシーの詳細についての動画をご覧ください。

セキュリティ対策についての動画を見る

動画: セキュリティ対策についての動画をご覧ください。

要素リファレンス

要素リファレンスでは、JSONThreatProtection ポリシーの要素と属性について説明します。

    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
       <DisplayName>JSON Threat Protection 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

ポリシーの内部名。name 属性の値には、文字、数字、スペース、ハイフン、アンダースコア、ピリオドを使用できます。255 文字を超える値を指定することはできません。

必要に応じて、管理 UI プロキシ エディタで <DisplayName> 要素を使用してポリシーに別のわかりやすい名前でラベルを付けます。

なし 必須
continueOnError

ポリシーが失敗した場合にエラーを返すには、false に設定します。これはほとんどのポリシーで想定される動作です。

ポリシーが失敗してもフロー実行を続行するには、true に設定します。

false 省略可
enabled

ポリシーを適用するには true に設定します。

ポリシーを無効にするには false に設定します。その場合、ポリシーはフローに接続されていているとしても適用されません。

true 省略可
async

この属性は非推奨となりました。

false 非推奨

<DisplayName> 要素

name 属性に加えて、管理 UI プロキシ エディタのポリシーに別のわかりやすい名前でラベルを付けるために使います。

<DisplayName>Policy Display Name</DisplayName>
デフォルト:

なし

この要素を省略した場合、ポリシーの name 属性の値が使用されます

要否: 省略可
型: 文字列

<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>
    
デフォルト: この要素を指定しないか、負の整数を指定した場合、システムは制限を適用しません。
要否: 省略可
型: 整数

エラー リファレンス

このセクションでは、このポリシーによってエラーが発生したときに返される障害コードとエラー メッセージ、Edge によって設定される障害変数について説明します。これは、障害に対処する障害ルールを作成するうえで重要な情報です。詳細については、ポリシーエラーについて知っておくべきこと障害の処理をご覧ください。

ランタイム エラー

ポリシーの実行時に、以下のエラーが発生することがあります。

障害コード 障害文字列 HTTP ステータス 発生する状況
steps.jsonthreatprotection.ExceededArrayElementCount JSONThreatProtection[policy_name]: Exceeded array element count at line [line_num] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.ExceededContainerDepth JSONThreatProtection[policy_name]: Exceeded container depth at line [line_num] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.ExceededObjectEntryCount JSONThreatProtection[policy_name]: Exceeded object entry count at line [line_num] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.ExceededObjectEntryNameLength JSONThreatProtection[policy_name]: Exceeded object entry name length at line [line_num] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.ExceededStringValueLength JSONThreatProtection[policy_name]: Exceeded string value length at line [line_num] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.ExecutionFailed JSONThreatProtection[policy_name]: Execution failed. reason: [string] 500 障害文字列をご覧ください。
steps.jsonthreatprotection.NonMessageVariable JSONThreatProtection[policy_name]: Variable [var_name] does not resolve to a Message 500 障害文字列をご覧ください。
steps.jsonthreatprotection.SourceUnavailable JSONThreatProtection[policy_name]: Source [var_name] is not available 500 障害文字列をご覧ください。

デプロイエラー

なし。

障害変数

以下の変数は、このポリシーによりエラーが発生したときに設定されます。詳細については、ポリシーエラーについて知っておくべきことをご覧ください。

変数 説明
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="JSON Threat Protection 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 攻撃となるような構造を使おうと試みます。すべての設定はオプションであり、潜在的な脆弱性に対するサービス要件を最適化するよう調整する必要があります。

関連トピック

JSON to XML ポリシー

XML Threat Protection ポリシー

Regular Expression Protection ポリシー