跳至内容

如何在不排除规则的情况下明确允许 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.在 Add rule(添加规则)屏幕的 Rule Type(规则类型)下,选择 Rule builder(规则生成器)。
对于 Name(名称),请输入名称以标识此规则。
对于 Type(类型),选择 Regular rule(常规规则)。
对于 If a request(如果请求),选择 Matches the statement(匹配语句)。
对于检查,选择正文
对于内容类型,选择 JSON
对于** JSON 匹配范围**,选择
对于 How AWS WAF should handle the request if the JSON in the request body is invalid(请求正文中的 JSON 无效时 AWS WAF 应如何处理请求),选择适合您的选项。
对于要检查的内容,选择完整 JSON 内容
对于匹配类型,选择匹配正则表达式
对于 Regular expression(正则表达式),粘贴以下示例 regex-pattern:

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

(可选)对于 Text transformation(文本转换),选择文本转换或 None(无)。有关详细信息,请参阅文本转换
对于 Oversize Handling(超尺寸处理),选择适合您的配置的选项。有关详细信息,请参阅在 AWS WAF 中处理超尺寸 Web 请求组件
对于 Action(操作),选择 Allow(允许)。有关更多信息,请参阅规则操作

6.    选择添加规则

7.对于 Set Rule Priority(设置规则优先级),选择您的规则并将其移至比阻止请求的规则更高的优先级。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.在 Add rule screen(添加规则屏幕)的 Rule Type(规则类型)下,选择 Rule builder(规则生成器)。
对于 Name(名称),输入名称以标识规则。
对于 Type(类型),选择 Regular rule(常规规则)。
对于 If a request(如果请求),选择 Matches the statement(匹配语句)。
对于检查,选择单个标头
对于标头字段名称,输入 Content-Type
对于匹配类型,选择匹配正则表达式
对于 Regular expression(正则表达式),粘贴以下示例 regex-pattern:

(?:pdf|jpeg)

(可选)对于 Text transformation(文本转换),选择文本转换或 None(无)。有关详细信息,请参阅文本转换
对于 Action(操作),选择 Allow(允许)。有关更多信息,请参阅规则操作

6.    选择添加规则

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

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

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

相关信息

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

AWS 官方已更新 2 年前