WAF(Web Application Firewall,Web 应用防火墙)是站在网站入口的一道安检,它会拆开每个 HTTP/HTTPS 请求查看内容,把看起来像已知攻击的请求拦下。
打个比方:写字楼保安手里有一本通缉令相册,每天翻看进出的人。有人拎着撬棍、蒙面翻墙进来,相册里有,保安拦下;有人西装革履、刷卡进门、跟前台点头微笑,相册里没有,保安放行。可这个人恰恰是来踩点的。WAF 的工作方式就是这样:它比对“像不像坏人”,却不判断“你要干什么”。
具体来说,WAF 检查 URL 路径、查询参数、请求头、Cookie 和请求体,用签名(signature)规则匹配已知的攻击写法,比如 SQL 注入里的 ' OR 1=1、跨站脚本里的 <script>、目录穿越里的 ../;再叠加频率限制、人机校验、语义分析和机器学习模型,来判断这是不是扫描器、恶意爬虫或者 CC 攻击。它真正擅长的是把每天成千上万次自动化试探挡在门外,让业务只处理“像真人发来的”请求。
它和相邻概念的位置不太一样:
| 对比项 | 网络防火墙 | WAF |
|---|---|---|
| 看的层次 | 网络层、传输层:IP、端口、协议 | 应用层:HTTP 请求的具体内容 |
| 判断依据 | 这个地址能不能连进来 | 这个请求长得像不像攻击 |
| 典型动作 | 封 IP、封端口 | 拦 SQL 注入、XSS、扫描器、恶意爬虫 |
它也不是 IDS/IPS 这类通用入侵检测设备的替代品:后者覆盖面更宽,WAF 只盯 Web 这一层,但盯得更细,也更理解 HTTP 的语法。
关键在于它的局限。WAF 的规则是“过去的攻击长什么样”的总结,所以它天然擅长挡已知套路;挡不住的则是这样一次调用:使用合法账号、走正常接口、参数类型全对、频率低得像真人,每一步都挑不出语法毛病,只是把订单号从 1001 改成 1002,把优惠券叠加用了三次,或者把不属于自己的数据一条条读走。这些属于越权和业务逻辑漏洞,请求本身完全“正常”,WAF 看不到“这个用户不该访问这条数据”这层语义,而这层语义只有业务系统自己知道。
所以对从业者来说,WAF 是纵深防御里最外层、性价比很高的一环,但不能当唯一防线:它挡掉的是噪音,剩下部分要靠权限校验、业务风控、审计日志和异常检测。对普通人来说,它更常见的存在感反而是“误伤”:你在表单里贴了一段含特殊字符的代码或正文,提交被拦了,多半是因为 WAF 规则太严,而不是网络坏了。
顺带一提,如今给大模型应用做输入过滤的“LLM 防火墙”,思路几乎同源:先在门口挡掉见过的坏写法,剩下的,仍要靠业务自己判断。
