刚刚碰到一个以前没怎么注意的问题,csrf保护。
什么是csrf?
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,简单的说就是攻击者可以盗用受害者的名义去发送各种请求,通常是通过某些方式借助受害者浏览器中存储的cookie值来实现的。
Flask-WTF的CSRF保护
flask-wtf实现csrf保护是很简单的,一般情况下是默认开启的,只需要在使用前配置'SECRET_KEY',然后在模板中加入:
{{ form.submit }}
{{ form.csrf_token }}
即可实现csrf保护。
一个简单的实现
在添加之前,登录界面的"登录"按钮代码:
<input class="btn btn-primary btn-block btn-flat" id="submit" name="submit" type="submit" value="登录">
在添加之后的效果:
<input class="btn btn-primary btn-block btn-flat" id="submit" name="submit" type="submit" value="登录">
<input id="csrf_token" name="csrf_token" type="hidden" value="IjQxZGYyZjQwMTFmMmM4ZDE2MWY3OWVjMmNjNzRjOGExYjg3ZTlhZGIi.XAYcoQ.FZXXEJyQpy3f8Ye0-gdIhEjbHn0">
可以看到添加了一个隐藏的字段。
如果此时打开f12,再点击登录按钮,就会发现提交的post请求中,cookie里面保存的session前面多了一长串的"乱码",这段乱码应该就是添加的token。
ps:其实写这篇的时候我还注意到一个很常见的问题,那就是cookie跟session的关系,以后有时间再整理下相关信息吧
参考资料:
https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/#icomments
https://ninghao.net/blog/2834(这是关于token的理解)