JSONThreatProtection ポリシー

概要

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

動画: JSON Threat Protection ポリシーでコンテンツ レベルの攻撃から API を保護する方法の詳細については、短い動画をご覧ください。

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

動画: Threat 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">

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

<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.ExecutionFailed 500 JSONThreatProtection ポリシーでは、さまざまな種類の ExecutionFailed エラーをスローできます。エラーのほとんどは、ポリシーで設定された特定のしきい値を超えた場合に発生します。これらのタイプのエラーには、オブジェクト エントリ名の長さオブジェクト エントリ数配列要素数コンテナの深さ文字列値の長さなどがあります。このエラーは、ペイロードに無効な JSON オブジェクトが含まれている場合にも発生します。
steps.jsonthreatprotection.SourceUnavailable 500 このエラーは、<Source> 要素で指定された メッセージ変数が次のいずれかである場合に発生します。
  • 範囲外(ポリシーが実行されている特定のフローで使用できない)
  • 有効な値 requestresponsemessage のいずれでもない
steps.jsonthreatprotection.NonMessageVariable 500 このエラーは、<Source> 要素がメッセージ型以外の変数に設定されている場合に発生します。

デプロイエラー

なし。

障害変数

このポリシーがエラーをトリガーした場合は、次の変数が設定されます。詳細については、ポリシーエラーについて知っておくべきことをご覧ください。

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

関連トピック

JSON to XML ポリシー

XML Threat Protection ポリシー

Regular Expression Protection ポリシー