You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配前后端中转场景:Flask-WTF如何在路由手动生成CSRF Token?

使用Flask-WTF实现CSRF Token的Cookie与表单分发

核心方案

Flask-WTF内置generate_csrf()工具函数,可直接生成CSRF Token并支持存入Cookie;同时其CSRFProtect扩展会自动完成请求时的Token校验,完全适配你的后端-前端服务器-客户端转发架构。

实现步骤

  1. 初始化CSRF保护扩展
    首先配置Flask密钥并初始化CSRFProtect,这是生成和校验CSRF Token的基础:

    from flask import Flask, jsonify, make_response
    from flask_wtf.csrf import CSRFProtect, generate_csrf
    from http import HTTPStatus
    
    app = Flask(__name__)
    # 必须设置密钥,用于加密生成CSRF Token
    app.config['SECRET_KEY'] = 'your-secure-secret-key-here'
    # 可选:自定义Cookie名称,默认值为'csrf_token'
    app.config['WTF_CSRF_COOKIE_NAME'] = 'csrf_token_cookie'
    # 初始化CSRF保护
    csrf = CSRFProtect(app)
    
  2. 在路由中生成并分发Token
    在路由函数里,生成Token后同时存入Cookie、加入响应JSON数据,通过前端服务器转发给客户端:

    @app.route('/')
    def home():
        response_data = {
            "status": "ok"
        }
        # 生成CSRF Token并自动存入配置好的Cookie
        csrf_token = generate_csrf(set_cookie=True)
        # 将Token加入响应数据,供前端嵌入表单使用
        response_data['form_csrf_token'] = csrf_token
        # 返回响应
        return make_response(jsonify(response_data)), HTTPStatus.OK.value
    

    若需自定义Cookie参数(有效期、域名等),可拆分操作手动设置:

    @app.route('/')
    def home():
        response_data = {
            "status": "ok"
        }
        # 仅生成Token,不自动设置Cookie
        csrf_token = generate_csrf()
        response_data['form_csrf_token'] = csrf_token
        
        response = make_response(jsonify(response_data))
        # 手动配置Cookie安全参数
        response.set_cookie(
            'csrf_token_cookie',
            csrf_token,
            expires=3600,  # 有效期1小时
            secure=True,   # 仅HTTPS环境下传输
            httponly=True  # 禁止JS读取,防范XSS攻击
        )
        return response, HTTPStatus.OK.value
    
  3. 客户端提交与自动校验
    客户端获取form_csrf_token后,提交表单时只需将其作为csrf_token字段放入表单数据,或作为X-CSRFToken请求头携带。CSRFProtect扩展会自动校验请求中的Token与Cookie中的Token是否一致,无需额外编写校验代码。

关键说明

  • 无需生成两个独立Token:同步器令牌模式的核心是Cookie中的Token与请求携带的Token一致,Flask-WTF的校验机制基于此设计,无需额外生成关联Token。
  • 密钥安全性:SECRET_KEY必须使用随机、高复杂度字符串,避免泄露,否则CSRF保护会失效。
  • Cookie安全配置:建议开启secure=True和httponly=True,进一步提升安全性。

内容的提问来源于stack exchange,提问作者LLL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:07:48