CSRF:即跨站请求伪造,Cross Site Request Forgery,指攻击者盗用登录用户的身份,以其名义发送恶意请求:包括发送消息,邮件,购买商品,虚拟货币转账。。。
CSRF攻击示意图:
CSRF产生的三个条件:
1.至少有两个网站(因为是跨站)
2.其中一个网站上存在漏洞
3.在恶意攻击的网站上有一个伪造请求
防止CSRF攻击:
1.在客户端向后端服务器发送请求时,后端会向响应总的cookie中设置csrf_token的值
2.在Form表单中添加一个隐藏的字段,值也是csrf_token
3.在用户点击提交时,会带上这两个值向后台发送请求
4.后端接受到请求时:
1.从cookie中取出csrf_token
2.从表单数据中取出来隐藏的csrf_token的值
3.进行对比
5.比较之后两值一样,代表是正常的请求,否则代表是不正常得到操作,不进行下一步操作。
在Flask项目中解决CSRF攻击:Flask-WTF扩展帮我们封装了一套完善的CSRF防护体系
1.首先设置应用程序中的secret_key:
app.secret_key='随机的字符串'
2.导入flask_wtf.csrf中的CSRFProtect类进行初始化,并关联app
from flask_wtf.csrf import CSRFProtect
#关联app
CSRFProtect(app)
3.在模板中设置csrf_token令牌,表单设置为隐藏
<form method="post" action="/">
<input type="hidden" name="csrf_token" value="{ { csrf_token() } }" />
</form>