You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS WAF:保留GenericRFI_BODY规则前提下为自有域名添加例外的实现方法

配置错误原因

你现有配置不生效主要有3个核心问题:

  1. 规则执行顺序错误:AWS WAF的规则优先级数值越小,执行顺序越靠前。你当前托管规则集优先级为0,自定义规则优先级为1,托管规则会先执行直接拦截命中GenericRFI_BODY的请求,自定义规则根本不会触发。
  2. 规则动作错误:你写的自定义规则动作是Block,和你要放行自有域名的需求完全相反。
  3. ByteMatchStatement配置语法错误:JsonBody下的MatchPattern是用来指定匹配JSON的范围(比如全量值、指定路径),不是填要匹配的字符串,目标匹配内容需要写到SearchString字段中。

正确配置方案

我们采用「托管规则打标签+自定义规则二次拦截」的逻辑实现需求,既保留GenericRFI_BODY的检测能力,又放行自有域名的合法请求:

步骤1:修改原有托管规则集配置,覆盖GenericRFI_BODY的动作为Count

修改后的AWS公共规则集配置如下,仅对命中GenericRFI_BODY的请求打标签,不直接拦截:

Priority: 0
Statement:
  ManagedRuleGroupStatement:
    VendorName: AWS
    Name: AWSManagedRulesCommonRuleSet
    # 新增规则级覆盖配置,仅把GenericRFI_BODY的动作改为Count
    RuleActionOverrides:
      - Name: GenericRFI_BODY
        ActionToUse:
          Count: {}
OverrideAction:
  None: {}
VisibilityConfig:
  SampledRequestsEnabled: true
  CloudWatchMetricsEnabled: true
  MetricName: AWS-AWSManagedRulesCommonRuleSet

步骤2:添加自定义拦截规则,优先级低于托管规则(数值更大)

该规则会对已经命中GenericRFI_BODY标签的请求做二次校验:如果请求JSON值中不包含自有域名,就执行拦截,包含则放行:

- Name: BlockExternalRFIExceptOwnDomain
  Priority: 1
  Statement:
    AndStatement:
      Statements:
        # 匹配命中GenericRFI_BODY标签的请求
        - LabelMatchStatement:
            Scope: LABEL
            Key: awswaf:managed:aws:common-rule-set:signal:genericRFI_BODY
        # 匹配请求JSON值中不包含自有域名的请求
        - NotStatement:
            Statement:
              ByteMatchStatement:
                SearchString: "https://example.com"
                FieldToMatch:
                  JsonBody:
                    MatchPattern:
                      # 匹配所有JSON值
                      All: {}
                    MatchScope: VALUE
                PositionalConstraint: CONTAINS
                TextTransformations:
                  - Priority: 0
                    Type: NONE
  # 仅拦截不符合要求的外部链接请求
  Action:
    Block: {}
  VisibilityConfig:
    SampledRequestsEnabled: true
    CloudWatchMetricsEnabled: true
    MetricName: BlockExternalRFIExceptOwnDomain

额外注意事项
  • 如果你的请求体不只有JSON格式,把FieldToMatch下的JsonBody改为Body即可匹配全量请求体内容
  • 如果有多个自有域名,在NotStatement下新增OrStatement,把多个域名的ByteMatch规则放到Or语句里即可
  • 可以新增URL_DECODE、HTML_ENTITY_DECODE等文本转换规则,避免攻击者用编码绕过检测

内容的提问来源于stack exchange,提问作者xtra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:15:03