烧瓶:flask_wtf CSRFProtect产生错误的请求CSRF会话令牌丢失

时间:2019-01-15 22:31:25

标签: python session nginx flask flask-wtforms

我正在尝试在Web应用程序上配置CSRF保护,但似乎无法弄清FLASK_WTF CSRFProtect

我正在使用来初始化我的应用

from flask import (Flask, g, jsonify, redirect, render_template, request,
                   url_for)
from flask_wtf.csrf import CSRFProtect

csrf = CSRFProtect()

def create_app():
    ...
    ...
    csrf.init_app(app)

    app.app_context().push()

    return app

我还在create_app函数中设置app.config["SECRET_KEY"]app.config["WTF_CSRF_SECRET_KEY"]

我所有的表单都有<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />

我读过其他有关使用Flask.Form的文章,但我没有这样做,只是从request.form字典中获取POST数据。

在POST上,我收到以下错误消息:

Bad Request

The CSRF session token is missing.

在本地,一切正常,但是当我从gunicorn,nginx环境运行代码时,它将失败。有任何想法吗?我需要设置SERVER_NAME属性吗?

编辑:

根据请求,在检查标题后实际上发送了CSRF_TOKEN。

嗯,源代码中的csrf_token形式似乎与POST发送的令牌不同

编辑:

我在create_app函数中添加了flask_wtf的配置变量,但仍无法正常工作:

app.config["WTF_CSRF_SECRET_KEY"] = "same_as_secret_key"
app.config["WTF_CSRF_FIELD_NAME"] = "csrf_token"
app.config['WTF_CSRF_ENABLED'] = True
app.config["WTF_CSRF_TIME_LIMIT"] = None  # valid throughout life of session
if debug:
    app.config["SESSION_COOKIE_SECURE"] = False
else:
    app.config["SESSION_COOKIE_SECURE"] = True
app.config["REMEMBER_COOKIE_SECURE"] = True

这与我的nginx配置有关吗?

0 个答案:

没有答案