在 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 模板中,你需要确保 `

` 标签具有 `method="post"` 属性,并且包含 `{{ form.csrf_token }}` 以插入 CSRF token: ```html {{ form.csrf_token }} {{ form.username.label }} {{ form.username(size=32) }} {{ form.password.label }} {{ form.password(size=32) }} {{ form.submit() }}
``` 这样,当用户提交表单时,Flask-WTF 就会验证 CSRF token 的有效性,从而保护你的应用免受 CSRF 攻击。

点赞(0)
×
关注公众号,登录后继续创作
或点击进入高级版AI
扫码关注后未收到验证码,回复【登录】二字获取验证码
发表
评论
返回
顶部