- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我在登录表单验证时收到的消息:
session: <SecureCookieSession {}>
request.form: ImmutableMultiDict([('eventid', ''), ('csrf_token', 'ImI1N2EwYjFjZmIxZDI4YjQ3ZTIxM2VmNGNkOGQzZTEzYzBiM2U4MzEi.DsNqRA.sw618M5laiwyElfOJ9mAIAAOXig'), ('password', 'admin'), ('username', 'admin'), ('submit', 'Sign In')])
INFO:flask_wtf.csrf:The CSRF tokens do not match.
127.0.0.1 - - [06/Nov/2018 19:18:57] "POST / HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [06/Nov/2018 19:18:57] "POST / HTTP/1.1" 200 -
我打印表单数据和session
,看起来session是空的。
我明白, session 必须有 token ,但它丢失了,我不知道我需要做什么才能在 session 中获得所需的数据。我关注了this tutorial看来,这一切都必须自动设置。
以前我没有使用 flask_wtf
并且一切正常。我检查了所有关于不匹配 token 或丢失 token 的可用问题,但我无法使用他们的建议解决我的问题。
这是我的文件:
__init__.py
#!/usr/bin/env python3
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
# register blueprints
from app.auth import auth
app.register_blueprint(auth.bp)
观点:auth.py
from flask import (
Blueprint,
flash,
g,
redirect,
render_template,
request,
session,
url_for,
)
from werkzeug.security import check_password_hash, generate_password_hash
from app import db
from app.auth.forms import LoginForm
from app.models import User
bp = Blueprint('auth', __name__)
@bp.route('/', methods=('GET', 'POST'))
@bp.route('/login/', methods=('GET', 'POST'))
def login():
print('session:', session)
form = LoginForm()
print('request.form:', request.form)
if form.validate_on_submit():
print('Form is valid')
eventid = form.eventid.data
username = form.username.data
password = form.password.data
# validate login
user = User.query.filter_by(username=username.lower()).first()
error = None
if not user or not check_password_hash(user.password, password):
error = 'Incorrect username-password combination.'
if not error:
session.clear()
session['user_id'] = user.id
return redirect(url_for('performance.index'))
flash(error)
return render_template('auth/login.html', title='Sign In', form=form)
形式:表单.py
from flask_wtf import FlaskForm
from wtforms import (
BooleanField,
PasswordField,
StringField,
SubmitField,
)
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
eventid = StringField('Event ID')
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Sign In')
模板:login.html
{% extends 'base.html' %}
{% block header %}
<h3>{% block title %}{{ title }}{% endblock %}</h3>
{% endblock %}
{% block content %}
<form action="" method="post">
<div class="form-group">
<label class="col-sm-12" for="username">
{{ form.username.label }}
</label>
{{ form.username() }}
</div>
<div class="form-group">
<label class="col-sm-12" for="password">
{{ form.password.label }}
</label>
{{ form.password() }}
</div>
<div class="form-group">
<label class="col-sm-12" for="eventid">
{{ form.eventid.label }}
</label>
{{ form.eventid() }}
</div>
<div class="form-group">
{{ form.submit }}
</div>
{{ form.hidden_tag() }}
</form>
{% endblock %}
配置:config.py
import os
class Config:
instance_path = '/some/path/to/instance/'
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
DATABASE = os.path.join(instance_path, 'app.sqlite')
SQLALCHEMY_DATABASE_URI = ('sqlite:///' + os.path.join(instance_path,
'app.sqlite'))
SQLALCHEMY_TRACK_MODIFICATIONS = False
我已经尝试了所有的命题,我能够找到:- 我在模板中设置了hidden_tag()
;- 我在配置中设置了SECRETE_KEY
;- 我尝试将 FlaskForms
更改为 Forms
;- 其他解决方案。
他们都没有帮助。我已经坐了三个晚上了。任何建议都会很好。
更新
如果我不使用 Blueprint
,即如果我使用 @app.route(...)
而不是 @bp.route(... )
在我的 auth.py
中,我能够登录,尽管 session
仍然是空的。所以,现在我不明白蓝图的问题。
最佳答案
我想你从教程中跳过了这部分:
The form.hidden_tag() template argument generates a hidden field that includes a token that is used to protect the form against CSRF attacks. All you need to do to have the form protected is include this hidden field and have the SECRET_KEY variable defined in the Flask configuration. If you take care of these two things, Flask-WTF does the rest for you.
所以在你的配置文件中,你应该设置 key
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
如果这不起作用,请在您的 login.html 中尝试在表单的开头添加 csrf_token,如下所示:
<form action="" method="post">
{{ form.csrf_token }}
<div class="form-group">
<label class="col-sm-12" for="username">
{{ form.username.label }}
.....
关于python-3.x - flask_wtf.csrf CSRF token 不匹配 - 无法修复 flask 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178077/
假设我的 Web 应用程序使用 CSRF token 防止 CSRF 攻击,此外,它使用 SSL 并防止 XSS 攻击。此外,出于这个问题的目的,假设它仅在最近的浏览器中使用并且它们没有错误。我可以使
很多人都在谈论实现 CSRF 来阻止对网页的跨站点攻击。但我认为破坏 CSRF 并向服务器发出请求非常容易。 那么它是如何工作的呢? 您从一个页面开始,呈现一个表单并使用 CSRF token 保留一
在阅读了许多有关 CSRF 的文档后,我仍然有点困惑。所以我希望有人可以向我解释一下: 假设我有一个仅供经过身份验证的用户使用的个人资料页面,比如说 abc.com/profile,它会显示我所有的私
我们基于 Angular 的 web 应用程序与在不同域和上下文路径上运行的企业门户集成。我正在使用基于 Spring Security 的 CSRF token 来验证传入的请求。该应用程序在本地完
我正在开发一个 Web API。身份验证是通过 cookie 进行的。所有端点通过JSON接收参数在请求正文中。 我需要实现 CSRF token保护他们?这怎么可能被利用呢?是否可以通过正常发送JS
我正在开发一个从 cookie header 解析 CSRF token 的应用程序。我想知道 CSRF token 是否使用 URL 安全字符进行 base64 编码(参见 https://simp
我知道当提交时表单中未包含 csrf token 时会发生此错误,但这次并非如此。 我正在尝试登录管理站点。管理员登录表单包含 csrf token ,我可以看到该 csrf token 的值与 cs
有没有办法对 Controller 的某些操作禁用 CSRF 验证,同时对其他操作保持启用状态? 就我而言,我有几个可配置的 Action 类,它们旨在注入(inject)到 Controller 中
我正在编写一个应用程序(Django,确实如此),我只想了解“CSRF token ”实际上是什么以及它如何保护数据。 如果不使用CSRF token ,发布数据不安全吗? 最佳答案 简单来说跨站请求
来自维基百科关于同源政策 https://en.wikipedia.org/wiki/Same-origin_policy The same-origin policy helps protect s
我在 Vue 环境中使用 axios 与用 Symfony 编写的网络服务对话。每个请求都需要设置一个 X-Auth-Token header 。该值存储在 auth_token cookie 中。
我想保护我的 REST 调用免受 XSRF 攻击。我正在做的是: 服务器在用户成功登录后向浏览器发送一个记录的 cookie。 在每个请求(GET、POST、DELETE)上,我将登录的 cookie
我知道这个问题以前有人问过。我已经尝试了人们给出的几乎所有选项,但我似乎无法解决它。我是一个完整的新手,所以请让我知道我哪里出错了。 我正在尝试编写一个简单的原始表单。到目前为止,我还没有实现任何身份
似乎 Laravel 5 默认将 CSRF 过滤器应用于所有非获取请求。这对于表单 POST 是可以的,但对于 POST DELETE 等的 API 可能是一个问题。 简单的问题: 如何设置没有 CS
当我从客户端向服务器发出 DELETE 请求时,我遇到了错误。 “CSRF token 已关联到此客户端”。响应代码:403 和响应头 { "cache-control": "no-cache,
to prevent CSRF attacks, a random CSRF secret has been generated. 以上内容来自 symfony: http://www.symfony
我正在使用 Django Rest Framework还有 django-rest-auth . 我有标准的 API 端点(/login、/logout、/registration...) 使用我的浏
这个问题在这里已经有了答案: OAuth2.0 Server stack how to use state to prevent CSRF? for draft2.0 v20 (3 个回答) 4年前关
我需要知道如何在 Impresspages cms 中禁用 CSRF 功能。我在之前的帖子中看到了一个可能的答案,但没有完全分类。当我的客户在 cleanwaterpartnership.co.uk
我正在使用 Django 1.7 和 django-rest-framework。 我制作了一个 API,它返回一些 JSON 数据并将其放入我的 settings.py REST_FRAMEWORK
我是一名优秀的程序员,十分优秀!