F|ask-WTF 中, 如何 用 CSRF 保护 A 在视图函数中调用form.validate() B 在模板中渲染CSRFField C 在应用配置中设置SECRET_KEY D 在表单类中添加 CSRFField
时间: 2024-10-13 20:17:23 浏览: 23
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() # 添加这一行
```
阅读全文