62 lines
2.0 KiB
Markdown
62 lines
2.0 KiB
Markdown
# 11.8 安全加固清单
|
||
|
||
:::tip 概述
|
||
安全是分层纵深:应用红线(prod 模式)→ 网络暴露面收敛 → 传输加密 → 数据与账号。本页按层给出可执行的加固项。
|
||
:::
|
||
|
||
## 应用层(硬红线)
|
||
|
||
| 项 | 要求 |
|
||
|---|---|
|
||
| app.prod | **true**——触发启动拒绝 |
|
||
| JWT 密钥 | 强随机长串,非默认样例值 |
|
||
| captcha.bypassCode | 空 |
|
||
| generator.enable | false |
|
||
| api.docs | false(或网关封锁 /swagger、/api.json) |
|
||
| api.metrics | false 或内网保护 |
|
||
| database.debug | false(SQL 不落日志) |
|
||
|
||
prod 模式不满足以上红线时**拒绝启动**——这是最后一道闸,不可绕过。
|
||
|
||
## 网络层
|
||
|
||
- MySQL/Redis 端口仅内网(compose 默认仅绑回环,保持)
|
||
- 应用 8000 不对公网,仅 Nginx 反代
|
||
- api.proxyIps 与真实拓扑一致,**严禁 0.0.0.0/0**(等于允许伪造来源 IP)
|
||
- 防火墙仅放行 443(必要时 80 跳转)
|
||
|
||
## 传输层
|
||
|
||
- HTTPS 全站(Nginx 终止 TLS,HSTS 可选)
|
||
- 文件域址(file.domainUrl)同样 https,防混合内容
|
||
- 内网 MySQL/Redis 可用 TLS 或纯内网隔离
|
||
|
||
## 数据层
|
||
|
||
- 数据库应用账号最小权限(仅 gin_* DML)
|
||
- Redis 设置密码
|
||
- 备份文件加密存放([11.9](/zh/deploy/backup.html))
|
||
- 日志脱敏:密码、Token 永不入日志(框架已保证,自定义日志注意)
|
||
|
||
## 入口防护
|
||
|
||
| 防护 | 配置 |
|
||
|---|---|
|
||
| 限流 | rateLimit 默认开启;公网可再降阈值 |
|
||
| 请求体限制 | api.maxBodyMB + nginx client_max_body_size |
|
||
| CORS | allowOrigin 收敛到实际域名 |
|
||
| temp 封禁 | nginx 与应用回退均已封(保持) |
|
||
| SVG | nginx 强制附件下载(保持,防内嵌脚本) |
|
||
|
||
## 运维层
|
||
|
||
- 上线走 `make check` 质量门禁
|
||
- 定期跑依赖漏洞扫描(govulncheck / 前端 audit)
|
||
- 账号:超管口令强且独立;离岗即回收角色
|
||
- 审计:操作日志/登录日志保留期符合合规
|
||
|
||
## 相关
|
||
|
||
- [4.11 安全架构设计](/zh/architecture/security.html)
|
||
- [11.1 部署 Checklist](/zh/deploy/checklist.html)
|