如何在不排除规则的情况下明确允许 AWS WAF 规则屏蔽的文件上传?

2 分钟阅读
0

我希望允许用户使用特定的文件扩展名上传文件,无需屏蔽当前的 AWS WAF 配置规则。

概述

HTTP 文件上传内容通常是以下类型:

  • 表单数据: 作为多部分表单数据的一部分,从网站表单发送到 API 的数据。
  • 二进制数据: 除了文本负载之外的任何文件。二进制文件可以是 JPEG 文件、GZip 文件或 PDF 文件。

要了解 AWS WAF 屏蔽 POST 请求的原因,请查看屏蔽文件上传的常见规则。如果常见规则不会屏蔽上传,请查看允许被屏蔽文件的其他选项。

通常,以下规则会屏蔽文件上传:

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • SizeRestrictions_BODY
  • 评估请求 BODY 的自定义规则

解决方法

确定屏蔽文件上传的规则

完成以下步骤,确定屏蔽文件上传的规则:

1.    打开 AWS WAF 控制台

2.    查看抽样的 Web 请求。抽样请求既包含有关屏蔽请求的规则的信息,也包含有关HTTP请求组件的信息。

3.    在概述页面的规则组内部规则下,找到 HTTP 请求组件。这些组件看起来类似于以下示例:

规则组内部的规则

awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body

请求

`POST /upload`  
`User-Agent: PostmanRuntime/7.30.0 Accept: */* Host: example.amazonaws.com Connection: keep-alive Content-Type: multipart/form-data; boundary=--------------------------421232031360350156757252 Content-Length: 4060737 `

4.    查看 AWS WAF 综合日志terminatingRuleMatchDetails

**注意:**只有针对 SQLi_BODYCrossSiteScripting_BODY 攻击时,才会填充 terminatingRuleMatchDetails 字段。

识别 POST 数据的内容类型

要确定内容类型,请查看 POST 数据中的 HTTP 标头内容类型。在前面的示例中,内容类型为 multipart/form-data

表单数据内容

对于标题值中包含多部分/表单数据的表单数据表单数据内容,请完成以下步骤:

1.    打开 AWS WAF 控制台

2.    在导航窗格中的 AWS WAF 下,选择 Web ACL
注意:****区域的默认选择是美国东部(弗吉尼亚北部)。选择您创建网络 ACL 的 AWS 区域。如果您为 Amazon CloudFront 设置了网络 ACL,请选择全球

3.    选择您的网络 ACL。

4.    在规则选项卡上,选择添加规则,然后选择添加我自己的规则和规则组

5.    在添加规则屏幕的规则类型下,选择规则生成器
名称中,输入名称以标识此规则。
类型中,选择常规规则
如果请求中,选择匹配语句
检查 中,选择主体
内容类型中,选择 JSON
在** JSON 匹配范围中,选择值**。
如果请求正文中的 JSON 无效时 AWS WAF 应如何处理请求中,请选择适合您的选项。
要检查的内容中,请选择完整 JSON 内容
匹配类型中,选择匹配正则表达式
正则表达式中,请粘贴以下示例 regex-pattern:

(?:.pdf|.doc|.docx|.ppt)

(可选)在文本转换中,选择文本转换或。有关更多信息,请参阅文本转换
超尺寸处理中,请选择适合您的配置的选项。有关更多信息,请参阅在 AWS WAF 中处理超尺寸 Web 请求组件
操作 中,选择允许。有关更多信息,请参阅规则操作

6.    选择添加规则

7.    在设置规则优先级中,选择您的规则并将其移至比阻止请求的规则更高的优先级。AWS WAF 根据设定的优先级对规则进行评估。有关更多信息,请参阅 Web ACL 中规则和规则组的处理顺序

8.    选择保存。确保规则按预期运行。

二进制数据内容

对于标题值与 application/pdfapplication/ppt 类似的二进制数据内容,请完成以下步骤:

1.    打开 AWS WAF 控制台

2.    在导航窗格中的 AWS WAF 下,选择 Web ACL
注意:****区域的默认选择美国东部(弗吉尼亚北部)。选择您创建网络 ACL 的 AWS 区域。如果您为 Amazon CloudFront 设置了网络 ACL,请选择全球

3.    选择您的网络 ACL。

4.    在规则选项卡上,选择添加规则,然后选择添加我自己的规则和规则组

5.    在添加规则屏幕规则类型下,选择规则生成器
名称中,输入名称以标识规则。
类型中,选择常规规则
如果请求中,选择匹配语句
检查 中,选择单标题
标题字段名称中,输入内容类型
匹配类型中,选择匹配正则表达式
正则表达式中,请粘贴以下示例 regex-pattern:

(?:pdf|jpeg)

(可选)在文本转换中,选择文本转换或。有关更多信息,请参阅文本转换
操作 中,选择允许。有关更多信息,请参阅规则操作

6.    选择添加规则

7.    在设置规则优先级中,选择您的规则并将其移至比阻止请求的规则更高的优先级。AWS WAF 根据设定的优先级对规则进行评估。有关更多信息,请参阅 Web ACL 中规则和规则组的处理顺序

8.    选择保存。确保该规则按预期运行。

**注意:**要将规则限制为特定的上传 URI 路径,请在 Web ACL 规则中使用 AND 语句

相关信息

如何开启 AWS WAF 日志记录并将日志发送到 CloudWatch、Amazon S3 或 Kinesis Data Firehose?

AWS 官方
AWS 官方已更新 1 年前