我希望允许用户使用特定的文件扩展名上传文件,无需屏蔽当前的 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_BODY 和 CrossSiteScripting_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/pdf 或 application/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?