用于无状态应用程序的 Python Flask-WTF CSRF

Posted

技术标签:

【中文标题】用于无状态应用程序的 Python Flask-WTF CSRF【英文标题】:Python Flask-WTF CSRF for Stateless Application 【发布时间】:2020-05-21 02:24:35 【问题描述】:

我可以知道如何在不使用 cookie 的情况下使用 python Flask-WTF 库实现 CSRF,正如 James Ward (http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services) 的这篇文章 (CSRF Token necessary when using Stateless(= Sessionless) Authentication?) 的回答中提到的那样。

目前我在 Google Cloud Run 中托管我的应用程序,它是无服务器和无状态的,它遇到了一个问题,即客户端在第一次加载后发出后续 ajax 请求时,有时(不是所有时间)找不到会话当服务器自动扩展和缩减时,在第一次加载期间创建的令牌。

提前谢谢你!

【问题讨论】:

【参考方案1】:

关于如何使用 CSRF 的示例。

from flask import Flask
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)  # initialise the flask app
app.config['SECRET_KEY'] = 'secret!'  # create the secret key

csrf = CSRFProtect(app)  # protect the csrf app
csrf.init_app(app)  # initialise the csrf with the app

希望这可以帮助您了解如何在不初始化 cookie 的情况下使用 CSRF

【讨论】:

嗨@z.yea,感谢您的回复。但我认为我的问题不够清楚。我面临的问题是,当 Cloud Run 自动扩展和缩减之前在服务器上创建的 CSRF 会话令牌时,它会显示错误“CSRF 会话令牌丢失”。有没有办法解决这个问题或者不需要使用 CSRF 会话令牌?我当前的源代码与您在上面显示的相同。

以上是关于用于无状态应用程序的 Python Flask-WTF CSRF的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Profiler 显示 [未知 - 无 Python 线程状态]

将 ehcache 用于通过 docker 部署的应用程序,违反无状态规则

如何将 Spring Security 的 CSRF 功能用于无状态端点?

JWT 用于无状态 API,但会话控制用于安全性

Webpack Hot Module Reloader 不适用于 React 无状态组件

ServiceFabric极简文档-5.0 Service Fabric有状态与无状态