zoukankan      html  css  js  c++  java
  • beego的跨站请求伪造

    csrf或者说xsrf是开发web服务避免不了要处理的问题,前后不分离的话,这个问题很好解决,一般框架都有完善的解决方法,并且文档中都会详尽介绍该种使用方式

    但是现在越来越多的web应用都是前后端分离模式开发,并且是不同域名,cookie携带csrf的方式无法满足所有需求

    通常这种情形下都会通过请求头来进行携带,但是beego框架的文档中并没有说明如何通过请求头header来携带csrftoken

    于是还是要从源码中找答案

    // CheckXSRFCookie checks xsrf token in this request is valid or not.
    // the token can provided in request header "X-Xsrftoken" and "X-CsrfToken"
    // or in form field value named as "_xsrf".
    func (ctx *Context) CheckXSRFCookie() bool {
    	token := ctx.Input.Query("_xsrf")
    	if token == "" {
    		token = ctx.Request.Header.Get("X-Xsrftoken")
    	}
    	if token == "" {
    		token = ctx.Request.Header.Get("X-Csrftoken")
    	}
    	if token == "" {
    		ctx.Abort(422, "422")
    		return false
    	}
    	if ctx._xsrfToken != token {
    		ctx.Abort(417, "417")
    		return false
    	}
    	return true
    }
    

      

    可以看到,源码中的校验方式,会从表单中获取_xsrf字段,没有的话就会从请求头中获取。

    所以,如果B/S模式开发的话,将从服务端获取的csrf放到请求头中

    "X-Xsrftoken" 或者 "X-Csrftoken" 字段下即可。

    看起来beego并没有从cookie中获取csrf的方式,Django框架是提供了cookie携带csrftoken的方式的,不过好像cookie携带也确实有些多余了,请求头携带一劳永逸。

  • 相关阅读:
    【持续更新】Android 源码下载地点
    android Notification 的使用
    如何设置 Notification 中PendingIntent 的 Intent
    CodeSmith部分类型转换代码
    【转】Request.ServerVariables参考
    ADT
    根据IP从纯真IP数据库查询地址
    VS2008重置默认环境
    Eclipse 安装SVN插件
    C#序列化JSON对象
  • 原文地址:https://www.cnblogs.com/haiton/p/12656889.html
Copyright © 2011-2022 走看看