8、防护XSRF的方式:post请求之类伪造请求

8、防护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

base64 插件:http://phpjs.org/functions/base64_decode/

var xsrf, xsrflist;
xsrf = $.cookie("_xsrf");
xsrflist = xsrf.split("|");
args._xsrf = base64_decode(xsrflist[0]);

args就是要提交的数据

支持controller级别的屏蔽:

只需要在需要屏蔽的controller中的Prepare方法中设置为false即可:

  // Prepare方法实在init后,请求方法前执行的
  func (c *UploadController) Prepare() {
      c.EnableXSRF = false
  }
  ```




猜你喜欢

转载自blog.csdn.net/weixin_44908159/article/details/107725596