处理大型请求(例如文件上载)时,某些请求可能会被阻止,并显示 413 请求实体过大 (413 Request Entity Too Large) 消息。

NSX Advanced Load Balancer 可以针对如下请求触发警示或阻止上载:

  • 文件大小超过虚拟服务 HTTP 配置文件中客户端最大正文大小字段下设置的限制。

  • 二进制上载数据随机匹配 System-Default-Policy 规则,这将导致 WAF 根据模式阻止或标记请求。

  • 超过正则表达式匹配限制,并且对输入运行的规则过长,这将导致 WAF 终止执行。

大型请求(例如常规文件上载)的处理方式有所不同,因为这些请求将被部分处理,如下所述。

处理大型上载的参数

对于大型文件上载,将考虑以下两个配置参数:

  • 客户端最大正文大小:在 NSX Advanced Load Balancer UI 中,导航到模板 > 配置文件 > 应用程序以配置 HTTP 策略。在 DDoS 选项卡下,客户端最大正文大小字段定义客户端请求的最大正文大小。此值可限制作为单个 HTTP 请求一部分的客户端 POST 的大小。对于 WAF 绕过规则,此值将被覆盖而不予考虑。否则,如果配置的值小于在 WAF 配置文件下配置的客户端最大完整标头大小,则在到达 WAF 之前,缓冲将失败,并在代理中显示 413 错误消息。要缓解此问题,请更新在客户端最大标头字段大小下配置的值,使其大于在客户端最大完整标头大小下配置的值。



    注:

    如果将客户端最大正文大小设置为默认值零(表示无限制),则该值将始终大于客户端最大完整标头大小

  • 客户端最大完整标头大小:在 NSX Advanced Load Balancer UI 中,导航到模板 > WAF > WAF 配置文件以配置 WAF 配置文件。在设置 > 其他设置部分下,客户端最大完整标头大小字段定义 WAF 扫描的客户端请求正文允许的最大大小。如果客户端请求大小大于在此字段中配置的值,则会在允许的情况下根据定义的大小,通过 WAF 扫描部分正文。

    如果 WAF 由于 System-Default-Policy 规则匹配而拒绝请求,则会丢弃其余请求正文。如果 WAF 允许该请求,则其余正文将在后端进行流式传输。

    确保选中忽略由部分扫描导致的请求正文解析错误复选框,以避免部分扫描触发的任何错误。

注:
  • HTTP 1.0 和 HTTP 2.0 均支持此功能。

  • content-length 请求支持此功能,分块编码的 POST 则不支持此功能。

  • 如果在“检测”模式下激活了 WAF 并接收了分块编码的 POST,则当 POST 的大小大于“WAF 配置文件”下定义的客户端最大完整标头大小时,该 POST 将被拒绝。

示例

以下是特定上载和相应 WAF 日志条目的示例:

示例 1:

  • 请求被拒绝并显示 413 消息,因为客户端请求大小超过 HTTP 配置文件中配置的最大值。

  • 由于 WAF 未检查请求,WAF 状态为“已通过”。



可以通过增加客户端最大正文大小的值来缓解此错误。

示例 2:

  • 大小限制已增加,因此未达到任何限制。

  • 请求被拒绝,并显示 403 消息

  • 同时,PDF 的某些部分与 WAF CRS 规则匹配时,请求会被拒绝,并且状态为“已拒绝”。



绕过 WAF

您可以将某些大型请求或特定上载请求绕过 WAF。很少有文件扩展名会绕过 WAF 检查,因为它们是静态内容。有关配置静态扩展的更多信息,请参阅配置 WAF 配置文件

您也可以使用 Modsec 绕过规则完全绕过上载,如以下部分中所述。

Modsec 绕过规则

以下是 Modsec 绕过规则的一些示例。建议使用 URL 配置这些规则。ID 应在 0 到 99.999 的本地范围内,或者在专用预留范围内,如 ModSecurity 手册中所述。此处选择的数字是为了说明示例。请确保规则 ID 在您的部署中是唯一的。

单个 URL:

SecRule REQUEST_URI "@rx /app/upload/" id:90001,phase:1,t:none,nolog,pass,ctl:ruleEngine=off

多个 URL:

SecRule REQUEST_URI "@rx /app/upload/|/app/upload_two/|/app/upload_three/" id:90002,phase:1,t:none,nolog,pass,ctl:ruleEngine=off

可以使用其他运算符(例如 @contains@startwith)更改此规则。

按 Content-Length:

SecRule REQUEST_HEADERS:Content-Length “@gt 1048576” phase:1,id:90003,nolog,pass,ctl:ruleEngine=off

注:

建议使用 URL 配置规则,而不使用 Content-Length

对恶意上载的影响

在这些情况下,攻击者可能想要偷偷向服务器进行恶意上载。此类上载可能包含恶意软件、勒索软件、病毒以及其他基于文件的漏洞利用(PDF 阅读器漏洞利用),等等。建议针对应用程序的上载目录使用病毒恶意软件扫描工具,以检测并缓解攻击。

上载绕过对应用程序安全的影响

如果大型二进制数据绕过配置了正确的上载请求或 URL 范围,WAF 将无法检查数据,并且影响将微乎其微。

您可以将某些大型请求或特定上载请求绕过 WAF。很少有文件扩展名会绕过 WAF 检查,因为它们是静态内容。

注:

大型上载将在流量处理期间进行缓存。即使不需要请求的某一部分并绕过该部分,在检查该请求的其他部分之前,也会缓存该部分。因此,仅排除上载参数并不能帮助实现最佳效果。