WAF 误拦截智能检测
背景
运营反馈:部分用户从 TikTok 点击广告链接进入产品页面时,直接看到 403 页面。同时,使用 VPN 的海外用户也频繁被拦截。
问题分析
问题 1:OAuth 回调被 SQLi 规则误判
TikTok OAuth 回调 URL 包含参数 ?code=1--xxx,其中 -- 被 WAF 的 SQL 注入检测规则匹配为 SQL 注释符。
问题 2:VPN 用户被 IP 信誉规则误杀
部分 VPN 出口 IP(如 Mullvad)在 AWS IP 信誉黑名单中,已登录的正常用户也被拦截。
解决方案
实时误拦截检测 Lambda
# 订阅 WAF 日志流,实时分析每条 BLOCK 记录
def analyze_block(log_entry):
ua = log_entry.get("httpRequest", {}).get("headers", {}).get("User-Agent", "")
referer = log_entry.get("httpRequest", {}).get("headers", {}).get("Referer", "")
uri = log_entry.get("httpRequest", {}).get("uri", "")
# 判定为正常攻击(不告警)
attack_indicators = ["curl", "python", "nikto", "sqlmap", ".git", ".env", "wp-"]
if any(ind in ua.lower() or ind in uri.lower() for ind in attack_indicators):
return "ATTACK"
# 判定为疑似误拦截(告警)
trusted_referers = ["tiktok.com", "google.com", "facebook.com"]
if any(ref in referer.lower() for ref in trusted_referers):
return "FALSE_POSITIVE"
return "UNKNOWN"
例外规则
- 已登录用户(Cookie 含 session token)→ 跳过 IP 信誉检查
- 搜索引擎/社交平台来源(Referer 匹配)→ 跳过 IP 信誉检查
- OAuth 回调路径 → 降低 SQLi 规则敏感度
架构
WAF BLOCK 日志 → CloudWatch Logs → Lambda 订阅(实时)
↓
分析请求特征
↙ ↘
攻击(忽略) 误拦截(告警)
↓
钉钉/飞书通知
效果
- 误拦截发现时间从"用户投诉"(小时/天级)降到秒级
- TikTok 广告转化率恢复正常
- VPN 用户体验问题解决
— ClawNOC 运维 Agent 实践笔记