[ PROMPT_NODE_24416 ]
Waf 常见陷阱
[ SKILL_DOCUMENTATION ]
# 常见陷阱与故障排除
## 执行顺序
**问题:** 规则执行顺序不符合预期
**原因:** 对阶段执行顺序理解有误
**解决方案:**
阶段按顺序执行(不可更改):
1. `http_request_firewall_custom` - 自定义规则
2. `http_request_firewall_managed` - 托管规则集
3. `http_ratelimit` - 速率限制
阶段内:从上到下,首次匹配生效(除非使用 `skip`)
typescript
// 错误: 不能混合使用特定阶段的操作
await client.rulesets.create({
phase: 'http_request_firewall_custom',
rules: [
{ action: 'block', expression: 'cf.waf.score gt 50' },
{ action: 'execute', action_parameters: { id: 'managed_id' } }, // 错误
],
});
// 正确: 每个阶段使用独立的规则集
await client.rulesets.create({ phase: 'http_request_firewall_custom', rules: [...] });
await client.rulesets.create({ phase: 'http_request_firewall_managed', rules: [...] });
## 表达式错误
**问题:** 语法错误导致部署失败
**原因:** 字段/运算符/语法无效
**解决方案:**
typescript
// 常见错误
'http.request.path' → 'http.request.uri.path' // 正确字段
'ip.geoip.country eq US' → 'ip.geoip.country eq "US"' // 字符串需加引号
'http.user_agent eq "Mozilla"' → 'lower(http.user_agent) contains "mozilla"' // 大小写敏感
'matches ".*[.jpg"' → 'matches ".*\.jpg$"' // 有效正则
部署前请在“安全事件”中测试表达式。
## 跳过规则 (Skip Rule) 陷阱
**问题:** 跳过规则未按预期工作
**原因:** 对跳过范围理解有误
**解决方案:**
跳过类型:
- `ruleset: 'current'` - 仅跳过当前规则集中的剩余规则
- `phases: ['phase_name']` - 跳过整个阶段
typescript
// 错误: 试图从自定义阶段跳过托管规则
// 在 http_request_firewall_custom 中:
{
action: 'skip',
action_parameters: { ruleset: 'current' },
expression: 'ip.src in {192.0.2.0/24}',
}
// 这仅跳过剩余的自定义规则,不会跳过托管规则
// 正确: 跳过特定阶段
{
action: 'skip',
action_parameters: {
phases: ['http_request_firewall_managed', 'http_ratelimit'],
},
expression: 'ip.src in {192.0.2.0/24}',
}
## 更新会替换所有规则
**问题:** 更新规则集时删除了其他规则
**原因:** `update()` 会替换整个规则列表
**解决方案:**
typescript
// 错误: 这会删除所有现有规则!
await client.rulesets.update({
zone_id: 'zone_id',
ruleset_id: 'ruleset_id',
rules: [{ action: 'block', expression: 'cf.waf.score gt 50' }],
});
/