5月27日 21:43
什么是 WAF(Web 应用防火墙)?如何使用 WAF 防止 XSS 攻击?
核心答案
WAF(Web Application Firewall)是部署在 Web 应用前端的流量检测与过滤层,通过分析 HTTP 请求的参数、头部、正文等内容,识别并拦截 XSS、SQL 注入等攻击。防止 XSS 的核心逻辑:WAF 对请求做多重解码(URL 解码、HTML 实体解码、Unicode 解码等),再用正则签名或语义分析匹配 <script>、javascript:、onerror= 等 XSS 特征,命中则阻断请求。
三种检测机制
签名检测——最主流。用正则匹配已知 XSS payload 模式,如 <script> 标签、事件处理器 on\w+=、javascript: 伪协议等。优点是速度快、规则可控;缺点是只能检测已知模式,编码绕过可逃逸。
行为分析——统计维度判断。监控单 IP 请求频率、参数长度异常、特殊字符密度等,超过阈值则标记风险。适合对付自动化扫描和批量注入,但误报率较高。
语义/机器学习检测——对输入做语法解析或用训练模型预测恶意概率,能识别变形和混淆 payload,但部署成本高、延迟大,通常作为辅助层。
常见绕过与防护
| 绕过方式 | 示例 | WAF 对策 |
|---|---|---|
| URL 编码 | %3Cscript%3E | 多层 URL 解码 |
| 大小写混淆 | <ScRiPt> | 规则不区分大小写 |
| 事件处理器 | <img src=x onerror=alert(1)> | 匹配 on\w+\s*= 模式 |
| 字符串拼接 | eval(String.fromCharCode(...)) | 语义分析 + 行为监控 |
关键原则:不能只靠 WAF。输入验证、输出编码、CSP 策略必须同步部署,WAF 是纵深防御的一层,不是银弹。
面试追问
- WAF 和传统防火墙的区别? 传统防火墙工作在网络/传输层(L3/L4),基于 IP 和端口过滤;WAF 工作在应用层(L7),理解 HTTP 语义,能识别业务逻辑攻击。
- WAF 误报怎么处理? 白名单放行合法请求,调整规则阈值,结合业务上下文做灰度观察,逐步收紧策略。
- WAF 部署位置? 反向代理模式(串联,阻断能力强)或旁路镜像模式(只检测不阻断,适合审计)。