# Windows Web 层的 WAF：边缘、CRS 与现实边界

> 在 CDN/边缘 WAF、IIS 请求过滤、ModSecurity/CRS 之间选择，先 log-only 上线，并处理误杀。

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

WAF 是**一层**，不是注入问题的修复。Windows 上：

- **边缘/CDN WAF**（Cloudflare/Akamai/Azure WAF）通常最省事，流量到 IIS 前就挡。
- **IIS 请求过滤 + URL Rewrite** 能做粗规则（方法、路径、大小、IP），不是完整 CRS。
- **ModSecurity + OWASP CRS** 在 Linux/Nginx 成熟；Windows/IIS 有构建，但不是开箱默认。没实际跑过就不要声称“IIS ModSecurity 已验证”。

## WAF 能做什么

- 挡已知坏模式（SQLi/XSS/RCE 签名）；
- 限速/防爆破；
- 地理/IP 黑白名单；
- 应用修复前的虚拟补丁。

不能：

- 修坏掉的授权；
- 挡看起来合法的业务逻辑攻击；
- 替代输入校验、参数化查询、打补丁。

## 上线

1. **Log-only** 一到两周，收集 top 触发规则。
2. 用定向例外修误杀，不要关整套规则。
3. staging 强制；测登录、上传、搜索、支付、API。
4. 生产强制；保留紧急 bypass runbook。
5. 定期看规则更新和日志。

## IIS 粗控制

```xml
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="52428800" maxUrl="4096" maxQueryString="2048" />
      <verbs allowUnlisted="false">
        <add verb="GET" allowed="true" />
        <add verb="POST" allowed="true" />
      </verbs>
    </requestFiltering>
  </security>
</system.webServer>
```

这不是 WAF，只是减少攻击面。CORS 预检需要 `OPTIONS` 就不要挡。

## 限速

- Nginx `limit_req` 放边缘。
- CDN/WAF 按 IP/session/path 限速。
- 登录/OTP/搜索在应用层限。
- 返回 `429` + `Retry-After`，不要静默丢。

> **警告: 误杀就是故障**
>
> 一条 CRS 规则挡住 JSON API 或上传，应用就挂。log-only、staging，按参数/路径做例外，写原因和到期时间。

## 验证

- WAF 日志有被挡请求和 rule id。
- 正常请求仍成功。
- 源站不可直连（绕过检查）。
- bypass/管理路径受限且审计。

## 实验室边界

E1。实验室没有部署 WAF；本页讲选择和上线，避免把 Windows-only 部署说大。

## 来源

- [OWASP — ModSecurity](https://owasp.org/www-project-modsecurity/)
- [OWASP — Core Rule Set](https://coreruleset.org/)
- [Microsoft Learn — Azure WAF](https://learn.microsoft.com/zh-cn/azure/web-application-firewall/overview)

---

来源页面: https://winbook.fyi/zh/server/security/waf/
