
概要
配列や文字列など 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">
次の表に、ポリシーのすべての親要素に共通の属性を記載します。
属性 | 説明 | デフォルト | 要否 |
---|---|---|---|
name |
ポリシーの内部名。 必要に応じて、管理 UI プロキシ エディタで |
なし | 必須 |
continueOnError |
ポリシーが失敗した場合にエラーを返すには、 ポリシーが失敗してもフロー実行を続行するには、 |
false | 省略可 |
enabled |
ポリシーを適用するには ポリシーを無効にするには |
true | 省略可 |
async |
この属性は非推奨となりました。 |
false | 非推奨 |
<DisplayName> 要素
name
属性に加えて、管理 UI プロキシ エディタのポリシーに別のわかりやすい名前でラベルを付けるために使います。
<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>
デフォルト: | この要素を指定しないか、負の整数を指定した場合、システムは制限を適用しません。 |
要否: | 省略可 |
型: | 整数 |
エラー リファレンス
このセクションでは、このポリシーによってエラーが発生したときに返される障害コードとエラー メッセージ、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 攻撃となるような構造を使おうと試みます。すべての設定はオプションであり、潜在的な脆弱性に対するサービス要件を最適化するよう調整する必要があります。