什么是 CSRF?
CSRF(跨站请求伪造)是一种攻击手段,攻击者通过伪装合法用户请求,窃取其身份执行非预期操作。例如:用户登录后,攻击者诱导其点击恶意链接,可能完成支付或修改设置。
常见防御方法
1. 验证令牌(CSRF Token)
- 在表单中添加随机生成的 token 字段
- 服务端验证 token 是否匹配
- ✅ 示例代码:
from flask import Flask, session, request app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/submit', methods=['POST']) def submit(): token = request.form.get('csrf_token') if token != session.get('csrf_token'): return '无效的 CSRF 令牌', 403 # 处理请求逻辑
2. 双重提交 Cookie
- 服务端将 token 存入 Cookie 和请求头
- 通过对比两者实现验证
- 🔒 优点:避免 token 暴露在 URL 中
3. SameSite 属性
- 设置 Cookie 的
SameSite=Strict
或Lax
- 🚫 阻止跨站请求携带 Cookie
- 示例:
response.set_cookie('session_id', 'abc123', samesite='Strict')
实战建议
- 使用 Flask-WTF 等库自动处理 token
- 配合 HTTPS 加强传输安全🔒
- 定期更新安全策略🔄
扩展阅读
如需深入了解 Web 安全,可参考 Python Web 安全最佳实践。