两个唯一的“ FlaskForm”对象上的CSRF令牌不是唯一的,CSRF失败[重复]

问题描述 投票:-1回答:1
关于此问题的先前问题是here。在Flask-WTF表单上,CSRF令牌继续失败。配置和设置的详细信息在链接中。

我现在发现的是在模板上,我在视图中传递了两种形式,每种形式上的csrf_token不是唯一的。我不太明白为什么? CSRF令牌应该是唯一的

per格式,对吗?

[我在Chrome中检查了令牌,它们是相同的-都包含在代码的底部。

<form method="post" class="mt-4" id="form_1"> {{ form1.csrf_token }} <div class="form-group" {{ form1.form_field1(class_='form-control', id='foo', type='text', placeholder='Enter your data') }} </div> <div class="form-group"> {{ form1.form_field2(class_='form-control', id='bar', type='text', placeholder='More data please') }} </div> {{ form1.submit(class_='btn btn-lg btn-info btn-block', form='form_1' ) }} <!-- <button form="form_1" type="submit"--> <!-- class="btn btn-lg btn-info btn-block">--> <!-- <i class="fa fa-lock fa-lg"></i>&nbsp;--> <!-- </button>--> </form> <form class="mt-3" method="post" id="form_2"> <div class="form-group input-group"> {{ form2.csrf_token }} {% if current_user.has_value() %} {{form2.field(type='checkbox', checked=1)}} {% else %} {{ form2.field(type='checkbox') }} {% endif %} {{ form2.update(type='submit', class_='btn btn-light input-group-append') }} </div> </form>

<form method="post" class="mt-4" id="form_1">
<input id="csrf_token" name="csrf_token" type="hidden" value="ImM5OWI2NTJiY2RhOGJkNjlkYjFkYzliM2JkMDM4N2JmODQwMDU1YWQi.XiAz0A.7r1lBMq-tO0wrukerCfIFgXwK9M">

.....

 <form class="mt-3" method="post" id="form_2">
 <div class="form-group input-group">
 <input id="csrf_token" name="csrf_token" type="hidden" value="ImM5OWI2NTJiY2RhOGJkNjlkYjFkYzliM2JkMDM4N2JmODQwMDU1YWQi.XiAz0A.7r1lBMq-tO0wrukerCfIFgXwK9M">

flask jinja2 csrf flask-wtforms
1个回答
0
投票
这是因为整个请求都会缓存令牌。请参阅注释以了解令牌生成功能https://github.com/lepture/flask-wtf/blob/master/flask_wtf/csrf.py#L20

另一个有趣的问题是,您在同一文档中使用相同的id属性获得2个HTML元素。

© www.soinside.com 2019 - 2024. All rights reserved.