在 Flask 中,用来保护表单免受 CSRF(跨站请求伪造)攻击的常用扩展是 Flask-WTF。Flask-WTF 是 Flask 和 WTForms 的集成,它提供了 CSRF 保护和其他一些有用的表单功能。 安装 Flask-WTF 的命令如下: ```bash pip install Flask-WTF ``` 然后,在 Flask 应用中启用 CSRF 保护,你可以这样做: ```python from flask import Flask from flask_wtf import CSRFProtect app = Flask(__name__) csrf = CSRFProtect(app) # 你的路由和视图函数在这里 ``` 当你的 Flask 应用启用了 Flask-WTF 的 CSRF 保护后,所有通过 POST 方法提交的表单都需要包含一个 CSRF token。这个 token 可以通过 Flask-WTF 提供的表单类自动插入到表单中。 另外,你需要确保你的客户端(例如 HTML 页面)能够正确处理这个 token。通常,这个 token 会被插入到一个隐藏的表单字段中,然后在表单提交时一并发送。 例如,你可以创建一个带有 CSRF 保护的表单类: ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Sign In') ``` 然后,在你的视图函数中,你可以使用这个表单类来创建一个表单实例,并将其传递给模板进行渲染: ```python from flask import render_template from .forms import LoginForm @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): # 处理表单提交 pass return render_template('login.html', title='Sign In', form=form) ``` 在 HTML 模板中,你需要确保 `
``` 这样,当用户提交表单时,Flask-WTF 就会验证 CSRF token 的有效性,从而保护你的应用免受 CSRF 攻击。