博客系统自文档 · 第 12/16 篇
目录 · 上一篇:事件驱动与模块解耦 · 下一篇:部署与增量发布
写在前面
安全不是单点:应用层守卫 + 网关限流 + 账号锁定 + 内容审核。本篇按 请求路径 列出防护层。
功能与体验
| 威胁 | 用户感受 | 防护 |
|---|---|---|
| 明文抓包 / 重放 | 无感(后台加密封签) | /encrypt 网关 suite |
| 接口刷量 | 429 友好页 | Nginx + Throttler |
| 暴力破解 | 账号临时锁定 | Redis auth:login:lock:{username}:{ip} |
| 机器注册 | 图形验证码 | captcha + Redis |
| 违规内容 | 评论待审/禁言 | sensitive-word + RPG ban |
生产压测报告见 docs/生产环境安全压测报告-2026-06-18.md(对外需脱敏)。
设计与实现
双层限流
flowchart TD
Client[Client]
Nginx["Nginx limit_req zones"]
Throttler["ThrottlerGuard 全局"]
Perm["PermissionGuard"]
Handler[Controller]
Client --> Nginx --> Throttler --> Perm --> Handler
Nginx(main.conf)示例 zone:
| zone | 用途 |
|---|---|
perip |
通用 API 15r/s |
rpg_perip |
RPG 30r/s |
static_perip |
静态 50r/s |
Nest ThrottlerGuard:进程内计数,在 PermissionGuard 之前 作为 Nest 入口首层守卫(app.module.ts 注册顺序)。
RPG 路由在 nginx 有 更长前缀 location,优先匹配专用限流。
加密网关(/encrypt · 2026-09)
生产开启 VITE_NUXT_OPEN_ENCRYPT=true 时,客户端请求走 /encrypt 前缀,由 gateway.middleware 解密验签后再进业务路由。不兼容旧版静态 AES 整包 { content }。
| 配置 | 说明 |
|---|---|
Nest app_gatewayCrypto |
aes | gm,默认 aes |
前端 VITE_NUXT_GATEWAY_CRYPTO |
须与 Nest 同值 |
app_gatewaySignWindowMs |
时间戳窗口,默认 5 分钟 |
| 套件 | 对称 | 封装 key | HMAC | 登录密码字段 |
|---|---|---|---|---|
aes |
AES-256-CBC | RSA-2048 | HMAC-SHA256 | RSA |
gm |
SM4-CBC | SM2 | HMAC-SM3 | SM2 |
有 JSON body 时信封为 { alg, encKey, iv, content, ts, sign };GET/DELETE/multipart 用头 X-Gateway-*。实现:src/utils/gateway-crypto/(与 Home / Admin 同构拆分)。生产改键须同步 deploy/pm2/env.production。
工具页静态 AES(如 AI 摘要)走 utils/crypto.ts,与网关无关。
认证安全
- 登录密码字段按套件 RSA/SM2 传输 + bcrypt 存储(与网关对称层是两层)
- refresh token 黑名单
- GitHub OAuth ticket 一次性
- 微信小程序登录:
POST /user/auth/wechat/miniprogram为公开接口,须防刷(可与 IP 限流叠加)
敏感词
sensitive-word模块:词库 + 审核队列- 命中可与 RPG 禁言 联动(
punishment.service)
连接上限
jiang-xia.top.conf:limit_conn conn_perip 50 防单 IP 占满连接;WebSocket 单独 limit_conn 20。
踩坑与取舍
- 限流过严影响 SEO 爬虫:静态与 HTML 用不同 zone。
- 429 响应:nginx 配置 JSON/HTML 友好错误页(
common-errors.conf)。 - 开发环境 Throttler 仍生效:本地压测注意调阈值或关 guard。
- RPG 充值走 rpg_perip:
POST /rpg/recharge/create与签到等同属 RPG 限流区。
系列导航
- 目录:博客系统分类
- 上一篇:11 事件驱动与模块解耦
- 下一篇:13 部署与增量发布
- 导读:导读 · 第 0 篇
延伸阅读
blog-server/README.md「加密网关」节docs/生产环境安全压测报告-2026-06-18.mddeploy/nginx/README.mddeploy/nginx/conf.d/main.conf

全部评论(0)