25 分钟
实战专项

Web 安全攻防实战

OWASP Top 10、XSS/CSRF/SQL注入/SSRF 防御

  • 理解 OWASP Top 10 安全风险
  • 掌握 XSS/CSRF/SQL注入/SSRF 的防御
  • 理解认证安全和密码哈希
  • 掌握安全头和传输安全

Web 安全攻防实战

安全不是功能,是底线。一个 SQL 注入漏洞可能拖垮整个数据库。这节课覆盖 Python Web 开发中最常见的安全问题。

SQL 注入

示例代码(可运行)

XSS(跨站脚本)

示例代码(可运行)

CSRF(跨站请求伪造)

CSRF:利用用户已登录的身份发起伪造请求攻击场景:用户登录了 bank.com用户访问了恶意网站 evil.comevil.com 有一个表单自动提交到 bank.com/transfer浏览器自动带上 bank.com 的 cookie转账成功! 防御:CSRF Token(Django: {% csrf_token %},每次请求验证)SameSite Cookie 属性(Lax/Strict)验证 Origin/Referer 头敏感操作需要二次验证(密码/验证码) SameSite Cookie:Strict: 完全不允许跨站发送cookie(最安全,体验差)Lax: 允许顶级导航的GET请求带cookie(默认,平衡)None: 允许跨站(必须配合Secure) FastAPI 需要手动实现 CSRF 保护Django 内置 CsrfViewMiddlewareCSRF防御:Token + SameSite Cookie + Origin验证

认证安全与密码哈希

示例代码(可运行)
🚫安全红线

密码用 bcrypt/argon2/PBKDF2 哈希,加盐,别明文存,别用 MD5SQL 写参数化的用户输入要转义、校验生产环境必须用 HTTPSJWT 密钥要 256bit+,设过期时间SECRET_KEY/API Key 别提交到 Git文件上传要验证类型、用随机文件名、隔离存储定期用 pip-audit 扫依赖漏洞。

安全头与传输安全

示例代码(可运行)
SSRF防御

SSRF:服务端请求伪造

SSRF 是攻击者让服务器请求内网地址的漏洞:

示例
# SSRF 攻击场景:
# 一个图片代理功能:
# GET /proxy?url=http://example.com/img.jpg
# 攻击者改为:
# GET /proxy?url=http://169.254.169.254/latest/meta-data/
# 169.254.169.254 是云服务器元数据地址!
# 可以获取临时凭证、IAM角色信息

# 防御:
# 1. URL 白名单(只允许指定域名)
# 2. 禁止访问内网IP(10.x/172.16-31.x/192.168.x/127.x/169.254.x)
# 3. 禁用重定向(或验证重定向目标)
# 4. 使用独立的网络命名空间/出口IP
# 5. DNS rebinding 防护(先解析IP验证,再用IP连接)
选择题

防御 SQL 注入的正确方式是?

选择题

密码应该用什么算法存储?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

正确顺序通常是:先写能跑的单体,但内部清晰分层(路由/业务/数据)、模块边界明确、有测试覆盖;等团队规模、流量和独立发布诉求真的上来,再按「变更频率、负载特征、独立性」去拆服务。过早微服务会把单机内的函数调用变成跨网络调用,带来分布式事务、链路排查、运维复杂度等一堆难题。

挑战任务

密码哈希验证器

简单+50 XP

实现密码哈希和验证函数,使用 PBKDF2 + salt。

密码哈希验证器
2 个测试用例

课后作业

输入验证器

中等+20 XP

写一个函数验证用户输入,防止 XSS,过滤转义 HTML 特殊字符。

输入验证器
1 个测试用例