beego安全之CSRF防范处理

一:CSRF介绍

CSRF(Cross-site request forgery) 简称跨站请求攻击,攻击者盗用了你的身份,以你的名义发送恶意请求,通过脚本或第三方工具带着你的身份数据 请求你的api地址造成资金或数据泄露危险


二:防范方法

目前主要有两种常用方法防治增加token/referer验证  beego内置了csrf防范机制,当然你也可以后台自己创建一个token令牌进行验证,在这里我们主要介绍beego内置的防范方法

1:你需要在应用配置文件中加上 enablexsrf 也可以在入口文件引入一个模块添加上也行

enablexsrf = true   开启验证
xsrfkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o   令牌key
xsrfexpire = 3600   有效时间


2:开启防御后 所有POST PUT DELET 请求中没有  _xsrf值都会被拒绝,这样如果破坏者通过其他方式请求就会被防御,如果想通过需要在模板中设置xsfr值具体设置需要通过XSRFFormHTML() 函数来配合使用

func (c *IndexController) Index(){
    c.Data["xsrfdata"]=template.HTML(this.XSRFFormHTML())
}

在表单中使用

<form action="/new_message" method="post">
  {{ .xsrfdata }}
  <input type="text" name="message"/>
  <input type="submit" value="Post"/>
</form>

在js中也可以单独获取到xsrf值进行提交也会通过


<input type="hidden" id="xsrf" value="{{.xsrf_token}}" />

var xsrftoken = $('#xsrf').val(');

$.post(url,{id,id,name:name,_xsrf:xsrftoken},function(data){} )



 3:屏蔽xsrf请求防御 

有时候会遇到有些请求不需要进行xsrf验证 可以单独屏蔽某个controller 不进行验证


type AdminController struct{
    beego.Controller
}

func (a *AdminController) Prepare() {
    a.EnableXSRF = false  //关闭验证
}


取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论