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