XSRF

XSRF 是一个 Tango 的 XSRF 中间件.

可以起到防止跨站请求伪造和表单重复提交的作用。

安装

go get github.com/tango-contrib/xsrf

示例

type Action struct {
    render.Render
    xsrf.Checker
}

func (a *Action) Get() error {
    return a.Render("test.html", render.T{
        "XsrfFormHtml": a.XsrfFormHtml(),
    })
}

func (a *Action) Post() {
    //中间件会自动检查XSRF,如果校验失败会输出默认的错误信息
}

func main() {
    t := tango.Classic()
    t.Use(xsrf.New(expireTime))  //expireTime为XSRF值的刷新时间
    t.Run()
}

如果希望某个Action不进行校验XSRF,可以在Action结构体中使用xsrf.NoCheck

type Action struct {
    xsrf.NoCheck
}

如果希望某个Action不自动校验XSRF,改为自己校验XSRF后输出自定义的XSRF错误信息,则需要实现中间件的AutoCheck()方法:

type Action struct {
    xsrf.Checker
}

func (a *Action) AutoCheck() bool {
    return false
}

func (a *Action) Post() {
    if a.IsValid() == false {
        //这里写XSRF校验失败的代码
    }
}

还可以在XSRF校验之后执行 Renew() 方法来生成新的XSRF值,起到防止表单刷新的作用:

type Action struct {
    xsrf.Checker
}

func (a *Action) AutoCheck() bool {
    return false
}

func (a *Action) Post() {
    if a.IsValid() == false {
        //这里写XSRF校验失败的代码
    }
    a.Renew()  //重新生成新的XSRF值,刷新表单时XSRF会校验失败
}