什么是跨站请求伪造?

图中 Browse 是浏览器,WebServerA 是受信任网站/被攻击网站 A,WebServerB 是恶意网站/点击网站 04-跨站请求伪造保护 - 图1B。
(1) 一开始用户打开浏览器,访问受信任网站 A,输入用户名和密码登陆请求登陆网站 A。
(2) 网站 A 验证用户信息,用户信息通过验证后,网站 A 产生 Cookie 信息并返回给浏览器。
(3) 用户登陆网站 A 成功后,可以正常请求网站 A。
(4) 用户未退出网站 A 之前,在同一浏览器中,打开一个 TAB 访问网站 B。
(5) 网站 B 看到有人登录后,他会返回一些攻击性代码。
(6) 浏览器在接受到这些攻击性代码后,促使用户不知情的情况下浏览器携带 Cookie(包括
sessionId)信息,请求网站 A。这种请求有可能更新密码,添加用户什么的操作。

解决办法:定义csrf_token函数, 在表单中添加 from.csrf_token, 在客户端的cookie中设置csrf_token

来源于:https://www.cnblogs.com/liudemeng/p/9270720.html

为了实现 CSRF 保护,Flask-WTF 需要程序设置一个密钥。Flask-WTF 使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪

设置密钥方法

在app.py中,设置 Flask-WTF
如:

  1. app = Flask(__name__)
  2. app.config['SECRET_KEY'] = 'guess what is'
  • app.config 字典可用来存储框架、扩展和程序本身的配置变量
  • SECRET_KEY 配置变量是通用密钥,可在 Flask 和多个第三方扩展中使用
    • 加密的强度取决于变量值的机密程度。不同的程序要使用不同的密钥,而且要保证其他人不知道你所用的字符串
    • 为了增强安全性,密钥不应该直接写入代码,而要保存在环境变量中