Ric*_*rdo 4 python csrf flask flask-wtforms
我目前正在使用 Flask-WTF v0.13.1,我的网站上有一些表单,所有表单都包括 CSRF 令牌。
由于某些原因,我必须在每个表单上设置不同的到期时间,到目前为止,我可以time_limit在创建 csrf 令牌时手动设置该值。
我想更新到 v0.14,根据更改日志 time_limit已经消失,并且文档中没有关于如何更改它的参考。查看源代码,我看到表单有一个csrf_time_limit元参数。
我试图在我的表单上设置该参数:
from flask_wtf import FlaskForm
class myForm(FlaskForm):
class Meta:
csrf_time_limit = 7200
content = TextAreaField('content')
Run Code Online (Sandbox Code Playgroud)
尽管调试csrf.py 模块,我看到validate_csrf_token的_FlaskFormCSRF实际上是永远不会被调用。
而是在方法validate_csrf内调用该方法protect(),在这种情况下,从不考虑元参数。
我不明白这是包的错误还是我遗漏了什么。
更新:
示例代码:
应用程序
from flask import Flask, render_template, request
from flask_wtf.csrf import CSRFProtect
from flask_wtf import FlaskForm
from wtforms import IntegerField
csrf = CSRFProtect()
app = Flask(__name__)
app.config.update(dict(
SECRET_KEY="super secret key"
))
csrf.init_app(app)
class MyForm(FlaskForm):
class Meta:
csrf_time_limit = 1
id = IntegerField('id')
@app.route("/", methods=['GET', 'POST'])
def test_form_csrf():
if request.method == 'POST':
myForm = MyForm(request.form)
print(myForm.id.data)
return render_template('test_form.html', myForm= MyForm())
Run Code Online (Sandbox Code Playgroud)
模板/test_form.html
<form method="post" action="/">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
{{ myForm.id }}
<input type="submit" value="test" />
</form>
Run Code Online (Sandbox Code Playgroud)
要求.txt
click==6.7
Flask==0.12.2
Flask-WTF==0.14.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
Werkzeug==0.14.1
WTForms==2.1
Run Code Online (Sandbox Code Playgroud)
项目结构
app.py
templates
|
--- test_form.html
Run Code Online (Sandbox Code Playgroud)
要运行代码,
FLASK_APP=app.py flask run
Run Code Online (Sandbox Code Playgroud)
我还在这一行放了一个调试断点来检查 的实际值time_limit,该值始终是3600。
if time_limit is None:
time_limit = current_app.config.get('WTF_CSRF_TIME_LIMIT', 3600)
Run Code Online (Sandbox Code Playgroud)
设置app.config['WTF_CSRF_TIME_LIMIT']为更短的值似乎有效。我已将其设置为 30 秒,app.config['WTF_CSRF_TIME_LIMIT'] = 30并且表单在该时间后过期,但我没有尝试过比默认值更长的值。
我不确定您是否可以动态更改 app.config 值,以便解决无法为每个表单设置到期时间的问题。
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |