安全中间件:WAF 与 TLS/SSL
安全中间件就是门口的安检。WAF 拦 SQL 注入、XSS、CSRF 这些恶意请求;TLS 给通信加密,让窃听者看到的是乱码。你的网站没上 HTTPS,浏览器直接标"不安全";没 WAF,分分钟被人拖库。
7.1 WAF:Web 应用防火墙
论WAF 干什么
检测和拦截 HTTP/HTTPS 恶意请求,防护 SQL 注入/XSS/CSRF/文件包含/命令注入等 Web 攻击。它工作在应用层(第七层),懂 HTTP 协议内容,不像防火墙只看 IP/端口。OWASP Top 10 里的常见攻击它都能拦。
工作模式三种:① 透明代理(反向代理模式):流量经过 WAF 再到后端,最常用;② 镜像模式:只检测不拦截,适合观察;③ 路由模式:接在网络边界。
7.2 开源 WAF:ModSecurity + Nginx
最经典的开源 WAF 组合:Nginx + ModSecurity 模块 + OWASP CRS(核心规则集)。ModSecurity 是引擎,CRS 是现成的规则库,覆盖 OWASP Top 10。
| 方案 | 特点 | 适合 |
|---|---|---|
| ModSecurity + CRS | 开源免费,规则可定制 | 中小团队、自建 |
| 云 WAF(阿里云/腾讯云) | 开箱即用,规则云更新 | 云上业务,省事 |
| Cloudflare WAF | 全球 CDN + WAF,DDoS 防护 | 出海业务 |
| 商业硬件 WAF | 性能强,规则丰富,贵 | 金融、大型企业 |
7.3 TLS/SSL 加密:HTTPS 的底层
论TLS 是什么
传输层安全协议,HTTPS 的底层,加密通信 + 身份验证 + 数据完整性。SSL 是老名字(已废弃),现在用的是 TLS 1.2 / TLS 1.3。它保证三件事:① 加密——窃听者看到的是密文;② 身份验证——通过证书确认对方是真网站不是钓鱼;③ 完整性——数据传输中被篡改能发现。
7.4 TLS 握手过程
TLS 1.3 比 1.2 快很多:1.2 要 2 个 RTT,1.3 只要 1 个 RTT。而且 1.3 废弃了不安全的加密套件,默认前向保密(PFS)。新项目直接上 TLS 1.3。
7.5 证书申请与 Nginx HTTPS
Let's Encrypt 提供免费 DV 证书,certbot 自动申请和续期。
| 类型 | 验证级别 | 浏览器显示 | 价格 |
|---|---|---|---|
| DV | 只验证域名所有权 | 小锁图标 | 免费(Let's Encrypt) |
| OV | 验证域名 + 企业身份 | 小锁 + 企业名 | 几百-几千/年 |
| EV | 严格验证企业 | 地址栏显示企业名 | 几千/年 |
7.6 身份认证:OAuth2 与 JWT(你是谁、能干嘛)
引子:HTTPS 解决了"通信不被窃听篡改",但没解决"对面这个人到底是谁"。你登录一个 App,后面每次请求怎么知道是你?这就是身份认证中间件干的活。两个面试高频词:OAuth2(第三方登录的授权协议)和 JWT(一种自包含的令牌格式)。
论OAuth2 和 JWT 不是一回事
OAuth2 是一套"授权框架",解决"App A 想访问你在微信上的资料,但不该让 A 知道你的微信密码"。它定义四种角色(资源所有者=你、客户端=App A、授权服务器=微信、资源服务器=微信的用户信息接口)和四种授权模式,最常用的就是上面那个"授权码模式"(扫码登录)。
JWT(JSON Web Token)是一种"令牌的格式",不是协议。它是一串 头部.载荷.签名 用点连起来的字符串,载荷里自带用户 ID、过期时间等信息,后端不用查 Session 存的东西,拿公钥验签就知道你是谁。无状态,分布式系统最爱。OAuth2 拿到的 access_token 经常就是个 JWT。
JWT 长什么样、怎么验签
① 别在 payload 放敏感信息。JWT 只是 base64 编码,谁都能解开看,放密码等于明文贴大街。② JWT 发出去就"收不回"。它无状态,后端不存 Session,用户登出了服务端很难立刻让旧 token 失效(要加黑名单/短过期)。③ 密钥别硬编码进前端。签名密钥只放服务端,泄露了等于谁都能伪造你的身份。
选型:单体小系统用 Session 就够;前后端分离、多端、要第三方登录(微信/支付宝/扫码),就上 JWT + OAuth2。
① WAF 是应用层安检,开源用 Nginx+ModSecurity+CRS,省事用云 WAF。
② TLS 1.3 是当前标准,握手快、前向保密。证书用 Let's Encrypt 免费申请,certbot 自动续期。
③ HTTPS 三件套:证书 + ssl_protocols TLSv1.2/1.3 + HSTS。
④ 身份认证:OAuth2 管第三方授权(扫码登录),JWT 是自包含令牌格式,无状态分布式最爱;payload 别放敏感信息。