1. 安全基础:OWASP Top 10 漏洞概述、Python后端安全威胁模型、安全开发生命周期

1.1 为什么后端安全这么重要?

说实话,我见过太多团队把安全当成「上线前最后补一下」的事。结果呢?漏洞被挖出来,数据泄露,用户流失。我自己就经历过一次——一个简单的 SQL 注入,差点让整个用户表被拖走。嗯,从那以后,我再也不敢轻视安全了。

后端安全,说白了就是保护你的服务器、数据库和 API 不被坏人利用。Python 后端虽然开发快,但如果不注意安全,框架自带的防护也救不了你。

核心观点: 安全不是功能,而是基础设施。你可以在任何阶段引入安全,但越早做,成本越低。

1.2 OWASP Top 10 漏洞概述

OWASP Top 10 是 Web 安全领域的「圣经」。它每几年更新一次,列出最危险的 10 类漏洞。我个人习惯每年至少看一遍,对照自己的项目检查一遍。

下面这张表,我建议你收藏。它涵盖了 Python 后端最常见的坑。

排名 漏洞名称 Python 后端常见场景
1 失效的访问控制 未校验用户权限,直接操作他人数据
2 加密机制失效 密码明文存储、使用弱哈希算法
3 注入攻击 SQL 注入、NoSQL 注入、命令注入
4 不安全的设计 缺乏限流、缺乏输入校验
5 安全配置错误 DEBUG 模式上线、默认密码未改
6 使用含有已知漏洞的组件 pip 依赖版本过旧,有 CVE 漏洞
7 认证和授权失败 JWT 未校验签名、Session 固定攻击
8 软件和数据完整性失效 反序列化攻击、不安全的 CI/CD 流程
9 安全日志和监控不足 未记录异常登录、未告警暴力破解
10 服务端请求伪造(SSRF) 用户传入 URL 后直接请求内网服务
我的经验: 排名第一的「失效的访问控制」是最容易被忽视的。我曾经在一个项目中,用户 A 只需要修改 URL 中的 ID 就能看到用户 B 的订单。这种漏洞,框架检测不出来,全靠开发者自己注意。

1.3 Python 后端安全威胁模型

威胁模型,说白了就是「谁可能攻击你,怎么攻击,攻击哪里」。你想想看,如果不清楚敌人是谁,你怎么防守?

我一般把 Python 后端的威胁分成三层:

  • 外部攻击者: 来自互联网的恶意请求。比如爬虫、扫描器、DDoS 攻击。
  • 内部威胁: 有权限的员工或第三方服务。比如离职员工删库、API Key 泄露。
  • 供应链攻击: 通过第三方库或依赖注入恶意代码。比如 PyPI 上的恶意包。

针对这三层,我建议你画一张简单的威胁模型图。不需要多复杂,但至少要回答三个问题:

  1. 攻击面在哪里?(API 端点、文件上传、用户输入)
  2. 攻击者能拿到什么?(用户数据、服务器权限、数据库)
  3. 我们有什么防御手段?(WAF、限流、输入校验)
避坑指南: 我曾经见过一个团队,只关注外部攻击,结果内部员工用测试账号删了生产数据库。记住,威胁模型要覆盖「内外兼修」。

1.4 安全开发生命周期(SDL)

安全开发生命周期,不是让你写一堆文档,而是把安全嵌入到开发的每个环节。我个人习惯用「五步法」来落地:

阶段 做什么 Python 后端示例
需求阶段 识别安全需求 明确哪些数据需要加密、哪些接口需要限流
设计阶段 威胁建模 画出数据流图,标注信任边界
开发阶段 安全编码 使用参数化查询、避免 eval()、使用 ORM
测试阶段 安全测试 SAST 扫描(如 Bandit)、DAST 扫描(如 ZAP)
运维阶段 持续监控 日志审计、异常告警、定期更新依赖

举个例子,在开发阶段,我要求团队必须遵守一条铁律:永远不要拼接 SQL 字符串。哪怕只是一个小查询,也要用 ORM 或参数化查询。为什么?因为 SQL 注入一旦发生,后果不堪设想。

# ❌ 错误做法:拼接 SQL
username = request.form['username']
query = f"SELECT * FROM users WHERE name = '{username}'"

# ✅ 正确做法:参数化查询
cursor.execute("SELECT * FROM users WHERE name = %s", (username,))
我的建议: 安全开发生命周期不需要一步到位。你可以先从「开发阶段」开始,强制使用安全编码规范。等团队习惯了,再逐步扩展到设计和测试阶段。

1.5 总结与行动清单

好了,这一章的内容就这些。说白了,安全基础就三件事:

  • 知道敌人是谁(OWASP Top 10)
  • 知道敌人怎么打(威胁模型)
  • 知道怎么防守(安全开发生命周期)

我建议你今晚就做一件事:打开你的项目,对照 OWASP Top 10 表格,检查一下有没有「失效的访问控制」或「安全配置错误」。相信我,你大概率能找到至少一个问题。

行动清单:
✅ 阅读 OWASP Top 10 官方文档(中文版)
✅ 为你的项目画一张简单的威胁模型图
✅ 在 CI/CD 中加入 Bandit 安全扫描
✅ 检查所有依赖版本,更新有 CVE 的包

下一章,我们会深入讲「SQL 注入与参数化查询」。到时候我会分享一个我亲手修复过的真实案例,保证让你印象深刻。