安全架构的层次
系统安全不是单一技术能解决的,需要从多个层次构建防护体系。安全架构通常分为网络安全、应用安全、数据安全和运维安全四个层面。
网络安全
HTTPS加密传输
所有API请求必须通过HTTPS传输,防止中间人攻击和数据窃听。使用Let's Encrypt免费证书或云厂商的SSL证书服务,为域名配置HTTPS。
防火墙与WAF
- 网络防火墙:限制只开放必要的端口(80、443),关闭其他端口
- WAF(Web应用防火墙):拦截SQL注入、XSS攻击、CSRF攻击等常见Web攻击
DDoS防护
分布式拒绝服务攻击通过大量请求淹没服务器。防护方案包括:
- 流量清洗(云厂商提供的DDoS防护服务)
- CDN分散流量
- 限流和黑名单机制
应用安全
认证与授权
| 方案 | 适用场景 | 说明 |
|---|---|---|
| JWT | 前后端分离项目 | 无状态认证,适合分布式系统 |
| Session + Cookie | 传统Web应用 | 服务端存储会话状态 |
| OAuth 2.0 | 第三方登录 | 微信、GitHub等社交登录 |
| RBAC | 权限管理 | 基于角色的访问控制 |
CORS策略
跨域资源共享(CORS)配置不当会导致安全漏洞。生产环境应严格限制允许的域名,禁止使用Access-Control-Allow-Origin: *。
输入验证
所有用户输入都不可信,必须在服务端进行验证:
- 参数类型检查
- 长度限制
- 特殊字符过滤(防止XSS和SQL注入)
- 频率限制(防止暴力破解)
数据安全
敏感数据加密
- 密码存储:使用bcrypt或Argon2进行哈希,禁止明文存储
- 传输加密:HTTPS + 敏感字段二次加密
- 数据库字段加密:身份证号、手机号等敏感信息加密存储
数据库安全
- 最小权限原则:应用账号只授予必要的权限
- SQL注入防护:使用参数化查询,禁止字符串拼接SQL
- 数据备份:定期备份,验证备份的可恢复性
运维安全
- 密钥管理:不将密钥提交到代码仓库,使用环境变量或密钥管理服务
- 日志审计:记录关键操作日志,定期审计
- 依赖安全:定期运行
npm audit或Snyk扫描依赖漏洞 - 最小化部署:生产环境不安装开发依赖,减少攻击面
↑