安全实践
安全不是单点漏洞,是流程和习惯。面试主线:SDLC 各阶段做什么、依赖怎么治理、出事怎么响应。
安全开发生命周期
| 阶段 | 动作 |
|---|---|
| 需求/设计 | 威胁建模(数据流、信任边界) |
| 开发 | 安全编码规范、代码审查(重点:鉴权/输入) |
| 测试 | 自动化扫描(SAST/DAST)、渗透测试 |
| 上线 | 配置审查(默认口令、调试开关)、依赖扫描 |
| 运行 | 监控告警、日志审计、应急演练 |
SAST vs DAST:静态代码扫描(早期、覆盖全)vs 动态黑盒测试(真实攻击视角、慢)。
依赖治理(供应链)
- 依赖漏洞:Log4j 类事件,一个依赖沦陷全系统受威胁
- 措施:SBOM(软件物料清单)、锁文件 + 校验和(go.sum/package-lock)、定期扫描(Dependabot/Trivy)、最小依赖(少装 = 少暴露)
- 镜像扫描:容器镜像漏洞扫描(Trivy)进 CI
配置与基础设施安全
| 项 | 措施 |
|---|---|
| 密钥 | KMS/Vault(见密码学篇) |
| 默认配置 | 改默认口令、关调试模式、关示例路由 |
| 网络 | 最小暴露端口、安全组、TLS 全链路 |
| 权限 | 服务账号最小权限、IAM 角色 |
| 日志 | 敏感数据脱敏(密码/手机号不落日志) |
日志与审计
- 安全日志:登录(成功/失败)、权限变更、敏感操作、越权尝试
- 审计要求:谁、何时、做了什么、结果(对应 MCP 安全篇的审计层)
- 日志本身要保护:集中存储、防篡改、保留期合规
- 告警:异常登录(异地、频率)、权限提升、批量拉取
应急响应
- 发现:告警 + 用户报告
- 遏制:隔离(下线/断网/改密钥),止血优先
- 根因:复盘漏洞成因(代码?配置?依赖?)
- 修复:补丁 + 加固 + 同类排查
- 复盘:流程改进(为什么没拦住)、通报(合规)
演练:定期应急演练(对应系统设计篇的故障演练,安全版)。
面试追问
- 安全左移是什么? 安全动作前移:设计阶段威胁建模、开发阶段审查扫描,别等上线
- SAST 和 DAST? 静态代码扫描(早、全)vs 动态黑盒(真实攻击、慢)。都要
- 依赖安全怎么做? SBOM + 锁文件校验 + 漏洞扫描 + 最小依赖。供应链是攻击面
- 安全日志记什么? 登录、权限变更、敏感操作。脱敏 + 防篡改 + 告警
- 应急响应流程? 发现 → 遏制 → 根因 → 修复 → 复盘。止血优先于根因