Cross-Site Request Forgery
Middleware csrf generates and validates CSRF tokens for Macaron Instances.
Installation
go get github.com/go-macaron/csrfUsage
package main
import (
"github.com/go-macaron/csrf"
"github.com/go-macaron/session"
"gopkg.in/macaron.v1"
)
func main() {
m := macaron.Classic()
m.Use(macaron.Renderer())
m.Use(session.Sessioner())
m.Use(csrf.Csrfer())
// Simulate the authentication of a session.
// If uid exists redirect to a form that requires CSRF protection.
m.Get("/", func(ctx *macaron.Context, sess session.Store) {
if sess.Get("uid") == nil {
ctx.Redirect("/login")
return
}
ctx.Redirect("/protected")
})
// Set uid for the session.
m.Get("/login", func(ctx *macaron.Context, sess session.Store) {
sess.Set("uid", 123456)
ctx.Redirect("/")
})
// Render a protected form. Passing a csrf token by calling x.GetToken()
m.Get("/protected", func(ctx *macaron.Context, sess session.Store, x csrf.CSRF) {
if sess.Get("uid") == nil {
ctx.Redirect("/login", 401)
return
}
// Pass token to the protected template.
ctx.Data["csrf_token"] = x.GetToken()
ctx.HTML(200, "protected")
})
// Apply CSRF validation to route.
m.Post("/protected", csrf.Validate, func(ctx *macaron.Context, sess session.Store) {
if sess.Get("uid") != nil {
ctx.RenderData(200, []byte("You submitted a valid token"))
return
}
ctx.Redirect("/login", 401)
})
m.Run()
}Options
csrf.Csrfer comes with a variety of configuration options:
Last updated
Was this helpful?