beego中XSRF联想

最近在准备go语言,新的工作内容主要是用基于go语言进行web api的迁移工作。

php:1年半,从这里开始接触web开发,什么都不懂,记得当时用的框架叫dojet,主要工作是实现mvc,由于当时团队并没有意识去打磨dojet的各种细节,例如xsrf的预防、区分环境的config、mysql分库分表等。连log这个小细节都没有人在意。惭愧的说一句,当开始转用java的时候,才知道log在服务器端如此重要。

java:1年半,貌似我做什么都是这么长时间就腻了。主要用公司内部框架rose,有一个team专门打磨这个框架,rose力图让php程序员快速进行java开发,在spring的filter阶段封装了自己的controller,可能是国内的技术人功利心太强,框架创始人功成名就,留下了残缺不全的文档和大量还在rose上构建项目的team。

web application框架的工作,是提高团队的生产效率,但在web server和app development之间建立了技术屏障,这个虽然谈不上难,那很多人没有跨越它的意识,到时3or5年后,仍旧在徘徊,没有熟络web开发。

go:之前看过部分php的symfony框架,httpfoundation部分可以看做请求处理的核心,这次看beego框架,大体差不多。区别在于,beego利用goroutine处理http或者https请求。而php更重要的是封装nginx传递的数据。nginx本身帮助php封装了性能核心。

Cut the bull shit...

xsrf可以百科一下,实现原理主要是在服务生成随机string,种到cookie中,前端提交form时利用hidden的input带上这个值,服务器端判断这个token是否合法。token有个过期时间。

这里之前我一直没有面对一个问题,就是服务器怎么保存原来的xsrf字符串,看了一下beego,应该是在router.go中利用cookie中的_xsrf初始化当前的context。

最后cookie最好搞个对称加密。

如果坏人获取到用户的cookie,同样可以跳过token的验证,那么可以利用session做token验证这件事,这样不担心一个用户打开过个tab,进行提交的问题。

看了一篇别人的blog,最好的办法是验证码,能比较彻底的解决这个问题,但是体验不好。

参考
http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
https://gitlab.com/lihaozuida/be-dojet

beego中XSRF联想
Share this