选择题:F|ask-WTF 中, 如何 用 CSRF 保护 A 在视图函数中调用form.validate() B 在模板中渲染CSRFField C 在应用配置中设置SECRET_KEY D 在表单类中添加 CSRFField
时间: 2024-10-13 21:17:25 浏览: 28
CSRF(Cross-site request forgery)是一种常见的网络安全攻击,攻击者可能会利用用户的已登录状态提交恶意请求。为了防止这种攻击,通常会在服务器端验证一个随机生成的token,这个token通常是通过cookie或隐藏字段(例如`_<csrf_token>`)传给客户端,然后在提交请求时一并发送回来。
在Flask应用中,使用CSRF保护的一个常见做法是在表单中自动处理这个问题。正确的方法是:
D. 在表单类中添加 `CSRFField`
具体步骤是,在Flask-WTF库中,你需要在表单类里导入`CSRFProtect`和`CSRFField`,然后在定义表单时添加一个`CSRFField`实例。例如:
```python
from flask_wtf import FlaskForm, CSRFProtect, CSRFField
class MyForm(FlaskForm):
your_field = StringField('Your field')
csrf = CSRFField()
```
当用户提交表单时,Flask-WTF会自动生成并验证这个CSRF token。
相关问题
F|ask-WTF 中, 如何 用 CSRF 保护 A 在视图函数中调用form.validate() B 在模板中渲染CSRFField C 在应用配置中设置SECRET_KEY D 在表单类中添加 CSRFField
F|ask-WTF是一个基于Flask框架的安全工具包,其中CSRF (Cross-Site Request Forgery) 是一种防止恶意网站伪装用户请求的一种安全机制。下面是使用F|ask-WTF在Flask应用中实施CSRF的一些建议步骤:
A. 在视图函数中调用form.validate():
在处理用户提交的表单时,你需要首先验证表单数据。例如,在视图函数中,你可以这样做:
```python
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
@app.route('/submit', methods=['POST'])
def submit_form():
form = MyForm()
if form.validate_on_submit(): # 这里调用了form的validate()方法
# 处理表单数据...
```
B. 在模板中渲染CSRFField:
在你的HTML模板中,需要嵌入`{{ csrf_token() }}`,这会生成一个隐藏字段包含CSRF令牌:
```html
<form action="/submit" method="post">
{{ form.csrf_token }}
<input type="text" name="username" ...>
<button type="submit">Submit</button>
</form>
```
C. 在应用配置中设置SECRET_KEY:
在你的Flask应用初始化时,需要提供一个SECRET_KEY作为CSRF令牌的密钥:
```python
from flask import Flask
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here' # 长度至少32位的随机字符串
csrf = CSRFProtect(app)
```
D. 在表单类中添加CSRFField:
为了利用F|ask-WTF提供的功能,直接在表单类中导入`CSRFProtect`并创建`CSRFProtect`实例即可:
```python
from flask_wtf import FlaskForm, CSRFProtect
class MyForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
__csrf_protect__ = CSRFProtect() # 添加这一行
```
阅读全文