Web Application Firewall の要求とファイル アップロードのサイズ制限

Web Application Firewall では、下限と上限の範囲内で要求のサイズ制限を構成することもできます。 Core Rule Set 3.2 以上を実行している Application Gateway Web アプリケーション ファイアウォールには、要求およびファイル アップロードに対する最大サイズの適用を無効にする機能など、要求とファイル アップロードのサイズを制御するためのより多くの機能が用意されています。

重要

Core Rule Set 3.2 以降を実行している Application Gateway v2 Web アプリケーション ファイアウォールでは現在、要求本文のサイズ、ファイル アップロードのサイズ、および要求本文の検査をより細かく制御できる新機能のデプロイを進めています。 Core Rule Set 3.2 以降を使用して Application Gateway v2 Web アプリケーション ファイアウォールを実行しており、サイズ制限のために要求が拒否される (または拒否されない) ことに気付いた場合は、このページの下部にあるトラブルシューティング手順を参照してください。

制限

要求本文のサイズ フィールドとファイル アップロードのサイズ制限は両方とも Web Application Firewall 内で構成できます。 最大要求本文サイズ フィールドはキロバイトで指定されます。このフィールドでは、ファイルのアップロードを除く、全体的な要求サイズの制限が制御されます。 ファイル アップロード制限フィールドは MB 単位で指定され、許容されるファイル アップロードの最大サイズを制御します。 要求のサイズ制限とファイル アップロードのサイズ制限については、「Application Gateway の制限」を参照してください。

Core Rule Set 3.2 以上を実行している Application Gateway V2 Web アプリケーション ファイアウォールでは、要求本文の最大サイズの適用とファイル アップロードの最大サイズの適用を無効にすることができ、要求またはファイル アップロードは大きすぎる場合でも Web Application Firewall によって拒否されなくなります。 Web Application Firewall で要求本文の最大サイズの適用とファイル アップロードの最大サイズの適用を無効になっている場合、許容される最大サイズは、Application Gateway の制限によって決まります。 詳細については、「Application Gateway の制限」を参照してください。

コンテンツの種類が multipart/form-data の要求のみが、ファイルのアップロードと見なされます。 コンテンツがファイルのアップロードと見なされるためには、filename ヘッダーを持つマルチパート フォームの一部である必要があります。 その他のすべてのコンテンツの種類では、要求本文のサイズ制限が適用されます。

Note

Core Rule Set 3.2 以降を実行しており、要求のヘッダー、Cookie、または URI の内容に基づいてアクションを実行する優先度の高いカスタム ルールがある場合、これは要求の最大サイズまたはファイル アップロードの最大サイズの制限よりも優先されます。 この最適化により、Web Application Firewall は、最初に要求全体を読み取る必要のない優先度の高いカスタム ルールを実行できるようになります。

例: ヘッダーが xyz の要求を許可するように設定された優先度 0 (最高の優先度) のカスタム ルールがある場合、要求は、そのサイズが要求の最大サイズ制限を超える場合でも、最大サイズ制限が適用される前に許可されます

要求本文の検査

Web Application Firewall には、要求本文の検査を有効または無効にする構成設定が用意されています。 既定では、要求本文の検査は有効になっています。 要求本文の検査を無効にすると、HTTP メッセージの本文の内容は Web Application Firewall によって評価されません。 このような場合、Web Application Firewall は、ヘッダー、Cookie、URI に対して Web Application Firewall ルールを引き続き適用します。 Core Rule Set 3.1 (またはそれ以前) を実行している Web Application Firewall では、要求本文の検査がオフになっている場合、要求本文の最大サイズ フィールドは適用されず、設定することもできません。

Core Rule Set 3.2 (またはそれ以降) を実行している Web Application Firewall の場合、要求本文のサイズの適用およびファイル アップロードのサイズ制限とは関係なく、要求本文の検査を有効または無効にすることができます。 さらに、Core Rule Set 3.2 (またはそれ以降) を実行している Policy Web Application Firewall では、要求本文の最大サイズとは関係なく、要求本文の検査の上限を設定できます。 要求本文の検査の上限は、Web Application Firewall に、検査し、ルールを適用する必要がある要求の深さを指示します。このフィールドに小さい値を設定すると、Web Application Firewall のパフォーマンスを向上できますが、検査されていない悪意のあるコンテンツが Web Application Firewall を通過するおそれがあります。

Core Rule Set 3.1 (またはそれ以前) を実行している古い Web Application Firewall の場合、要求本文の検査をオフにすると、128 KB を超えるメッセージを Web Application Firewall に送信できますが、メッセージ本文の脆弱性は検査されません。 Core Rule Set 3.2 (またはそれ以降) を実行している Policy Web Application Firewall の場合、要求本文の上限を無効にすると、同じ結果を実現できます。

Web Application Firewall でサイズ制限を超える要求を受信した場合、その動作は、使用する Web Application Firewall のモードとマネージド ルールセットのバージョンによって異なります。

  • Web Application Firewall ポリシーが防止モードの場合、サイズ制限を超える要求とファイル アップロードは、Web Application Firewall によってログされ、ブロックされます。
  • Web Application Firewall ポリシーが検出モードの場合、Web Application Firewall によって本文が指定された制限まで検査され、残りは無視されます。 Content-Length ヘッダーが存在し、ファイル アップロード制限を超える場合、Web Application Firewall によって本文全体が無視され、要求がログされます。

トラブルシューティング

Core Rule Set 3.2 以降を実行している Application Gateway v2 Web アプリケーション ファイアウォールのお客様で、最大サイズのために要求やファイル アップロードが誤って拒否される問題が発生する場合、または要求が完全に検査されていないことがわかった場合は、すべての値が正しく設定されていることを確認する必要があります。 PowerShell または Azure コマンド ライン インターフェイスを使用すると、各値がいくつに設定されているかを確認し、必要に応じて値を更新できます。

要求本文の検査を適用する

  • PS: "RequestBodyCheck"
  • CLI: "request_body_check"
  • Web Application Firewall で、Web Application Firewall ポリシーの設定に従って、要求本文を検査するかどうか、およびマネージドとカスタムのルールを要求本文のトラフィックに適用するかどうかを制御します。

要求本文の検査の上限 (KB)

  • PS: "RequestBodyInspectLimitInKB"
  • CLI: "request_body_inspect_limit_in_kb"
  • Web Application Firewall で検査し、マネージドまたはカスタムのルールを適用する要求本文の深さを制御します。 一般には、これを可能な限り最大の設定値に設定することをお勧めしますが、お客様によっては、パフォーマンスを向上するためにそれよりも小さい値に設定することが必要な場合もあります。

要求本文の上限を適用する

  • PS: "RequestBodyEnforcement"
  • CLI: "request_body_enforcement"
  • Web Application Firewall で要求本文に最大サイズ制限を適用するかどうかを制御します。オフにすると、要求は大きすぎる場合でも拒否されません。

要求本文の最大サイズ (KB)

  • PS: "MaxRequestBodySizeInKB"
  • CLI: "max_request_body_size_in_kb"
  • Web Application Firewall によって最大サイズ設定を超過したとして拒否されるまでの要求本文の大きさを制御します。

ファイル アップロードの上限を適用する

  • PS: "FileUploadEnforcement"
  • CLI: "file_upload_enforcement"
  • Web Application Firewall で、ファイル アップロードに最大サイズ制限を適用するかどうかを制御します。オフにすると、ファイル アップロードは大きすぎる場合でも拒否されません。

ファイル アップロードの最大サイズ (MB)

  • PS: "FileUploadLimitInMB"
  • CLI: file_upload_limit_in_mb
  • Web Application Firewall によって最大サイズ設定を超過したとして拒否されるまでのファイル アップロードの大きさを制御します。

Note

以前は、要求本文を検査してルールを適用するかどうかと、要求本文に最大サイズ制限を適用するかどうかは [要求本文の検査] によって制御されていました。 これは、2 つの別個のフィールドで処理されるようになり、オンまたはオフを個別に設定できるようになりました。

PowerShell

次の PowerShell コマンドを使用すると、Azure ポリシーが返され、その現在の設定を確認できます。

$plcy = Get-AzApplicationGatewayFirewallPolicy -Name <policy-name> -ResourceGroupName <resourcegroup-name>
$plcy.PolicySettings

次のコマンドを使用すると、ポリシー設定で、検査制限および最大サイズ制限に関連するフィールドを目的の値に更新できます。 次の例の 'RequestBodyEnforcement' を、更新する他の値のいずれかに置き換えることができます。

$plcy = Get-AzApplicationGatewayFirewallPolicy -Name <policy-name> -ResourceGroupName <resourcegroup-name>
$plcy.PolicySettings.RequestBodyEnforcement=false
Set-AzApplicationGatewayFirewallPolicy -InputObject $plcy

コマンド ライン インターフェイス

Azure CLI を使用すると、Azure ポリシー設定からこれらのフィールドの現在の値が返され、次のコマンドを使用して、フィールドを目的の値に更新できます。

az network application-gateway waf-policy update --name <WAF Policy name> --resource-group <WAF policy RG> --set policySettings.request_body_inspect_limit_in_kb='2000' policySettings.max_request_body_size_in_kb='2000' policySettings.file_upload_limit_in_mb='3500' --query policySettings -o table

出力:

FileUploadEnforcement    FileUploadLimitInMb    MaxRequestBodySizeInKb    Mode       RequestBodyCheck    RequestBodyEnforcement    RequestBodyInspectLimitInKB    State
-----------------------  ---------------------  ------------------------  ---------  ------------------  ------------------------  -----------------------------  -------
True                     3500                   2000                      Detection  True                True                      2000                           Enabled

次のステップ