您可以通过从评估中排除请求字段来调整规则,以减少假正例。
为规则配置排除项时,您可以从检查中排除以下字段:
从规则评估中排除请求字段
如需为规则配置请求字段排除项,请将配置与安全政策规则相关联。
这些规则不使用规则 ID。不过,您可以使用以下某个值配置 --target-rule-set 标志:
cel(--target-rule-set "cel"):仅将排除项应用于该安全政策规则中的自定义 CEL 规则。*(--target-rule-set "*",全局排除):将排除规则应用于附加到该安全政策的所有规则,包括自定义 CEL 规则和使用evaluatePreconfiguredWaf()的规则。
在后端安全政策(全球和区域级)中,您可以为每个目标(cel 或 *)配置最多 100 个以下各项:
- 请求标头
- 请求 Cookie
- 请求查询参数
- 请求 URI
- 请求正文
可用的字段运算符如下:
EQUALS:如果字段值等于指定值,则匹配。STARTS_WITH:如果字段值以指定值开头,则匹配。ENDS_WITH:如果字段值以指定值结尾,则匹配。CONTAINS:如果字段值包含指定值,则匹配。EQUALS_ANY:如果字段值为任何值,则匹配。
请求标头
您可以在排除字段中使用特定请求标头的标头名称,从而在规则评估期间将其从检查中排除。
当请求标头与排除项匹配时,系统会在规则评估之前从 request.headers 映射中移除整个标头条目(包括其名称和值)。
示例
以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除以 abc 开头或以 xyz 结尾的请求标头:
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-header-to-exclude "op=STARTS_WITH,val=abc" \
--request-header-to-exclude "op=ENDS_WITH,val=xyz"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称
请求 Cookie
您可以在排除字段中使用 Cookie 名称,在规则评估期间从检查中排除特定请求 Cookie。
当请求 Cookie 与排除项匹配时,整个 Cookie 条目(包括其名称和值)都会在规则评估之前从请求属性中排除。
示例
以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除以 session_ 开头的请求 Cookie:
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-cookie-to-exclude "op=STARTS_WITH,val=session_"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称
请求查询参数
您可以在排除字段中使用特定请求参数的参数名称,以便在规则评估期间从检查中排除这些参数。--request-query-param-to-exclude 标志同时适用于网址查询参数和解析的请求正文参数(JSON、表单数据和 GraphQL)。
当参数与排除项匹配时,整个参数条目(包括其键和值)都会在规则评估之前从 request.params 中移除,因此 has(request.params.param_name) 的评估结果为 false。
对于已解析的请求正文,您可以使用点表示法来定位嵌套字段和数组项:
- 顶级字段:
val=user - 嵌套字段:
val=user.name - 数组项:
val=items.0.name
示例
以下示例更新了位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除网址查询参数 bad-param、嵌套 JSON 字段 user.name 和 JSON 数组项字段 items.0.name:
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-query-param-to-exclude "op=EQUALS,val=bad-param" \
--request-query-param-to-exclude "op=EQUALS,val=user.name" \
--request-query-param-to-exclude "op=EQUALS,val=items.0.name"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称
请求 URI
您可以在规则评估期间从检查中排除请求行中的 URI(不包括查询字符串数据)。
排除 URI 时,整个 URI 字段都会从检查中排除。
示例
以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除包含 /bad-path 的请求 URI:
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-uri-to-exclude "op=CONTAINS,val=/bad-path"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称
请求正文
您可以在规则评估期间从检查中排除特定请求正文值。
当请求正文与排除项匹配时,request.body 属性会从规则评估中排除。
示例
以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除包含 bad-body-value 的请求正文:
gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-body-to-exclude "op=CONTAINS,val=bad-body-value"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称
字段值
如果您使用的字段运算符不是 EQUALS_ANY,则必须指定字段值。
对于请求标头、请求 Cookie 和请求查询参数,字段值允许使用的字符集包括以下字符:
!、#、$、%、&、*、+、-、.、^、_、`、|、~- 字母字符
A到Z(包括大写和小写) - 数字字符
0到9
对于请求正文,字段值的允许字符集包括除 '、\`,(, and)` 之外的所有可打印 ASCII 字符:
- 空格 (
) 和特殊字符:!、"、#、$、%、&、*、+、,、-、.、/、:、;、<、=、>、?、@、[、]、^、_、`、{、|、}、~ - 字母字符
A到Z(包括大写和小写) - 数字字符
0到9
对这些请求字段应用排除项时,系统会将已配置的字段值 (val=) 与以下内容进行不区分大小写的比较(转换后),以确定要从检查中排除哪些实体:
- 请求标头:与标头名称(键)匹配,以排除整个标头(名称和值)。
- 请求 Cookie:与 Cookie 名称匹配,以排除整个 Cookie(名称和值)。
- 请求查询参数:与参数名称或嵌套 JSON 路径(键)匹配,以排除整个参数(键和值)。
- 请求正文:与请求正文内容字符串匹配,以排除整个
request.body属性。
如果您想排除不在允许的字符集中的特定字符,则无需执行额外的编码。
对于请求 URI,字段值必须以 URI 格式提供,并遵循以下组件限制:
| 组件 | 限制 |
|---|---|
| Scheme | 允许,但仅限于 http 或 https |
| 主机 | 允许(可以是 IP 地址) |
| 端口 | 允许 |
| 路径 | 允许 |
| 查询 | 不允许 |
| Fragment | 不允许 |
对请求 URI 应用排除项时,系统会将已配置的字段值与请求行中的 URI(转换后不区分大小写)进行比较(不包括查询字符串)。请求行中的 URI 可以是相对的,也可以是绝对的。为请求 URI 配置排除项时,请考虑这一点。
移除排除对象
如需从安全政策规则中移除请求字段排除项,请使用 remove-preconfig-waf-exclusion 命令。您可以通过指定相应的字段排除标志来移除特定字段排除项,也可以省略字段标志来移除该目标规则集(cel 或 *)的所有排除项。
示例
以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中移除以 abc 开头的请求标头的排除项:
gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel" \
--request-header-to-exclude "op=STARTS_WITH,val=abc"
以下示例省略了字段标志,以移除为 PRIORITY 处的规则配置的所有请求字段排除项 (cel):
gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
--security-policy POLICY_NAME \
--target-rule-set "cel"
替换以下内容:
PRIORITY:规则的优先级POLICY_NAME:安全政策的名称