起因
前端页面要用Vue重写,导致原有的CSRF Token的方式并不好用了。为什么不好用?因为原有的方案是后端渲染,向前端输出CSRF Token。而且,大多数请求都是原生的Form Submmit来做的。而用Vue后,使用的是前端渲染,后端只负责输出数据,这样的话CSRF Token要是随着每一次请求都发送出去,感觉很不好。
解决
用Vue重写后,所有的Form提交都是用Ajax来做的,避免了由原生Form做提交。所以,对于每一个请求,都可以在提交前,统一写入CSRF Token。那么接下来的问题就是前端如何获取CSRF Token?
方法如下
Token被用户端放在Cookie中(不设置HttpOnly),同源页面每次发请求都在请求头或者参数中加入Cookie中读取的Token来完成验证。CSRF只能通过浏览器自己带上Cookie,不能操作Cookie来获取到Token并加到http请求的参数中。所以CSRF本质原因是“重要操作的所有参数都是可以被攻击者猜测到的”,Token加密后通过Cookie储存,只有同源页面可以读取,把Token作为重要操作的参数,CSRF无法获取Token放在参数中,也无法仿造出正确的Token,就被防止掉了
作者:匿名用户
链接:https://www.zhihu.com/question/21385375/answer/208281970
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个方法正好符合需求,问题解决。
后记
还有一篇不错的文章来介绍CSRF Token的,值得一读。