多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 防护XSRF的方式:post请求之类伪造请求 * #### 每一个用户一个cookie,所用的请求都需要验证这个cookie,如果没有这个cookie,则被认为跨站请求伪造 * #### 挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法 * #### CSRF 利用的是网站对用户网页浏览器的信任 ## beego自带的防范机制: * #### 配置文件配置: * ~~~ enablexsrf = true xsrfkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o xsrfexpire = 3600   //过期时间,默认1小时,单位秒 ~~~ * #### main.go文件的run前面: * ~~~ beego.BConfig.WebConfig.EnableXSRF = true beego.BConfig.WebConfig.XSRFKey = "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o" beego.BConfig.WebConfig.XSRFExpire = 360 ~~~ * #### 函数中设置xsrf数据:得在渲染模板的Get方法里面设置数据: ~~~ import "html/template" ​ ​ func (c *UserController) Get() {   c.Data["xsrfdata"]=template.HTML(c.XSRFFormHTML())   c.TplName = "user.html" } ~~~ ~~~ func (c *UserController) Post() {   c.TplName = "index.tpl" } ~~~ * 函数中重新设置过期时间: ~~~ this.XSRFExpire = 7200 this.Data["xsrfdata"]=template.HTML(this.XSRFFormHTML()) ~~~ * 模板中使用: ~~~ <form action="/user" method="post"> {{ .xsrfdata }} <input type="submit" value="提交"/> </form> ~~~ * #### ajax中使用:添加 \_xsrf 参数,需要两个插件 #### jQuery cookie插件:[https://github.com/carhartl/jquery-cookie](https://github.com/carhartl/jquery-cookie) #### base64 插件:[http://phpjs.org/functions/base64\_decode/](http://phpjs.org/functions/base64_decode/) ~~~ var xsrf, xsrflist; xsrf = $.cookie("_xsrf"); xsrflist = xsrf.split("|"); args._xsrf = base64_decode(xsrflist[0]); ​ args就是要提交的数据 ~~~ ## 支持controller级别的屏蔽:不让xsrf在这个控制器中生效,就要重写此控制器的Prepare方法。 ### **此处的Prepare不能写错或写别的方法。** * #### 只需要在需要屏蔽的controller中的Prepare方法中设置为false即可: ~~~ // Prepare方法实在init后,请求方法前执行的 func (c *UploadController) Prepare() {   c.EnableXSRF = false } ~~~