你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Web 应用程序防火墙请求和文件上传大小限制

Web 应用程序防火墙允许你在下限和上限内配置请求大小限制。 运行核心规则集 3.2 或更高版本的应用程序网关 Web 应用程序防火墙具有更多的请求和文件上传大小控制,包括禁用请求和/或文件上传的最大大小强制实施的能力。

重要说明

我们正在为运行核心规则集 3.2 或更高版本的应用程序网关 v2 Web 应用程序防火墙部署新功能,以更好地控制请求正文大小、文件上传大小和请求正文检查。 如果正在运行包含核心规则集 3.2 或更高版本的应用程序网关 v2 Web 应用程序防火墙,并且注意到请求因大小限制而被拒绝(或未被拒绝),请参阅此页面底部的故障排除步骤。

限制

请求正文大小字段和文件上传大小限制在 Web 应用程序防火墙中都是可配置的。 最大请求正文大小字段以千字节为单位进行指定并控制整个请求大小限制(不包括任何文件上传)。 文件上传限制字段以兆字节为单位进行指定并控制允许的最大文件上传大小。 有关请求大小限制和文件上传大小限制,请参阅应用程序网关限制

对于运行核心规则集 3.2 或更高版本的应用程序网关 v2 Web 应用程序防火墙,可以禁用最大请求正文大小强制实施和最大文件上传大小强制实施,Web 应用程序防火墙不再因太大而拒绝请求或文件上传。 当在 Web 应用程序防火墙内禁用最大请求正文大小强制实施和最大文件上传大小强制实施时,应用程序网关的限制决定了允许的最大大小。 有关详细信息,请参阅应用程序网关限制

只有内容类型为 multipart/form-data 的请求被视为文件上传。 若要将内容视为文件上传,它必须是多部分窗体的一部分,并且包含文件名标头。 对于所有其他内容类型,请求正文大小具有限制。

注意

如果正在运行核心规则集 3.2 或更高版本,并且具有高优先级自定义规则(根据请求标头、Cookie 或 URI 的内容执行操作),则此规则优先于任何最大请求大小或最大文件上传大小、限制。 此优化让 Web 应用程序防火墙先运行无需读取完整请求的高优先级自定义规则。

示例:如果将优先级为 0(最高优先级)的自定义规则设置为允许具有标头 xyz 的请求,即使请求的大小大于最大请求大小限制,也会在强制实施最大大小限制之前允许该请求

注意

文件上传限制有 4 KB 的缓冲区。 在文件上传超出设置限制和此缓冲区之前,不会强制实施文件大小限制。

请求正文检查

Web 应用程序防火墙提供了配置设置,用于启用或禁用请求正文检查。 默认情况下,请求正文检查处于启用状态。 如果请求正文检查已禁用,则Web 应用程序防火墙不会评估 HTTP 消息正文的内容。 在这种情况下,Web 应用程序防火墙会继续对标头、Cookie 和 URI 强制实施 Web 应用程序防火墙规则。 在运行核心规则集 3.1(或更低版本)的 Web 应用程序防火墙中,如果请求正文检查处于关闭状态,则最大请求正文大小字段不适用,且无法设置。

对于运行核心规则集 3.2(或更高版本)的策略 Web 应用程序防火墙,可以独立于请求正文大小强制实施和文件上传大小限制启用/禁用请求正文检查。 此外,运行核心规则集 3.2(或更高版本)的策略 Web 应用程序防火墙可以独立于最大请求正文大小设置最大请求正文检查限制。 最大请求正文检查限制告知 Web 应用程序防火墙它应检查规则并将其应用到请求中的深度:为此字段设置较低的值可以提高 Web 应用程序防火墙性能,但可能允许未指定的恶意内容通过 Web 应用程序防火墙。

对于运行核心规则集 3.1(或更低版本)的较旧 Web 应用程序防火墙,关闭请求正文检查会允许将大于 128 KB 的消息发送到 Web 应用程序防火墙,但不会检查消息正文是否存在漏洞。 对于运行核心规则集 3.2(或更高版本)的策略 Web 应用程序防火墙,可以禁用最大请求正文限制以实现相同的结果。

当 Web 应用程序防火墙收到超过大小限制的请求时,行为取决于 Web 应用程序防火墙的模式和所使用的托管规则集的版本。

  • 当 Web 应用程序防火墙策略处于阻止模式时,Web 应用程序防火墙会记录并阻止超出大小限制的请求和文件上传。
  • 在 Web 应用程序防火墙策略处于检测模式时,Web 应用程序防火墙会针对指定的上限制检查正文,并忽略其余内容。 如果Content-Length标头存在,并且大于文件上传限制,Web 应用程序防火墙就会忽略整个正文,并记录该请求。

疑难解答

如果你是运行核心规则集 3.2 或更高版本的应用程序网关 v2 Web 应用程序防火墙客户,并且请求或文件上传出现问题、因最大大小而被错误拒绝,或者看到未完全检查请求,则可能需要验证是否已正确设置所有值。 使用 PowerShell 或 Azure 命令行接口,可以验证每个值的设置,并根据需要更新任何值。

强制实施请求正文检查

  • PowerShell:“RequestBodyCheck”
  • CLI:“request_body_check”
  • 控制 Web 应用程序防火墙是否会检查请求正文,并按照 Web 应用程序防火墙策略的设置将托管规则和自定义规则应用到请求正文流量。

最大请求正文检查限制 (KB)

  • PowerShell:“RequestBodyInspectLimitInKB”
  • CLI:“request_body_inspect_limit_in_kb”
  • 控制 Web 应用程序防火墙检查托管/自定义规则并将其应用到请求正文中的深度。 一般来说,你希望将此设置为可能的最大设置,但一些客户可能希望将其设置为较低的值以提高性能。

强制实施最大请求正文限制

  • PowerShell:“RequestBodyEnforcement”
  • CLI:“request_body_enforcement”
  • 控制 Web 应用程序防火墙是否会对请求正文强制实施最大大小限制;关闭后,它不会因太大而拒绝任何请求。

最大请求正文大小 (KB)

  • PowerShell:“MaxRequestBodySizeInKB”
  • CLI: "max_request_body_size_in_kb"
  • 控制在 Web 应用程序防火墙因超过最大大小设置而拒绝请求正文之前请求正文的大小。

强制实施最大文件上传限制

  • PowerShell:“FileUploadEnforcement”
  • CLI:“file_upload_enforcement”
  • 控制 Web 应用程序防火墙是否会对文件上传强制实施最大大小限制;关闭后,它不会因太大而拒绝任何文件上传。

最大文件上传大小 (MB)

  • PowerShell:“FileUploadLimitInMB”
  • CLI: file_upload_limit_in_mb
  • 控制在 Web 应用程序防火墙因超过最大大小设置而拒绝文件上传之前文件上传的大小。

注意

“检查请求正文”之前控制了是否检查了请求正文并应用了规则,以及是否对请求正文强制实施了最大大小限制。 现在,这由两个单独的字段进行处理,这些字段可以独立打开/关闭。

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='128' policySettings.max_request_body_size_in_kb='128' policySettings.file_upload_limit_in_mb='100' --query policySettings -o table

输出:

FileUploadEnforcement    FileUploadLimitInMb    MaxRequestBodySizeInKb    Mode       RequestBodyCheck    RequestBodyEnforcement    RequestBodyInspectLimitInKB    State
-----------------------  ---------------------  ------------------------  ---------  ------------------  ------------------------  -----------------------------  -------
True                     100                   128                      Detection  True                True                      128                           Enabled

Next steps