【发布时间】:2020-10-03 22:38:44
【问题描述】:
我有一个烧瓶项目,它基本上有 2 个表单类,它们充当第三个表单类中的子表单。我将 2 个子表单与 FormField 字段一起使用。问题是当我提交表单时,我收到两个子表单的 csrf_token 错误。如果我在子表单中使用 csrf=false 属性,我不会得到这个,但这是否意味着我现在对 CSRF 攻击持开放态度?
class AddressForm(FlaskForm):
address = StringField(label='Address', validators=[DataRequired()])
address2 = StringField(label='Address 2', validators=[Optional()])
city = StringField(label='City', validators=[DataRequired()])
county = SelectField(label='County', validators=[DataRequired()], choices=[], coerce=int)
class Meta:
csrf = False
class NameForm(FlaskForm):
first_name = StringField(label='First Name', validators=[DataRequired(), Length(min=2)] )
last_name = StringField(label='Last Name', validators=[DataRequired(), Length(min=2)] )
class Meta:
csrf = False
class OrderForm(FlaskForm):
# Customer Details
customer_name = FormField(NameForm, separator='_')
customer_email = EmailField(label='Email', validators=[DataRequired(), Email()])
customer_mobile_phone = StringField(label='Mobile Phone Number', validators=[DataRequired()])
customer_alternative_phone = StringField(label='Alternative Phone Number', validators=[Optional()])
# Delivery Details
delivery_address = FormField(AddressForm, separator='_')
area = SelectField(label='Area', validators=[DataRequired()], coerce=int)
我已经在表单中包含了{{ form.hidden_tag() }},并且还配置了一个 SECRET_KEY。
【问题讨论】:
标签: python flask csrf flask-wtforms