XSRF

XSRF 是一个 Tango 的 XSRF 中间件.

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

安装

  1. go get github.com/tango-contrib/xsrf

示例

  1. type Action struct {
  2. render.Render
  3. xsrf.Checker
  4. }
  5. func (a *Action) Get() error {
  6. return a.Render("test.html", render.T{
  7. "XsrfFormHtml": a.XsrfFormHtml(),
  8. })
  9. }
  10. func (a *Action) Post() {
  11. //中间件会自动检查XSRF,如果校验失败会输出默认的错误信息
  12. }
  13. func main() {
  14. t := tango.Classic()
  15. t.Use(xsrf.New(expireTime)) //expireTime为XSRF值的刷新时间
  16. t.Run()
  17. }

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

  1. type Action struct {
  2. xsrf.NoCheck
  3. }

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

  1. type Action struct {
  2. xsrf.Checker
  3. }
  4. func (a *Action) AutoCheck() bool {
  5. return false
  6. }
  7. func (a *Action) Post() {
  8. if a.IsValid() == false {
  9. //这里写XSRF校验失败的代码
  10. }
  11. }

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

  1. type Action struct {
  2. xsrf.Checker
  3. }
  4. func (a *Action) AutoCheck() bool {
  5. return false
  6. }
  7. func (a *Action) Post() {
  8. if a.IsValid() == false {
  9. //这里写XSRF校验失败的代码
  10. }
  11. a.Renew() //重新生成新的XSRF值,刷新表单时XSRF会校验失败
  12. }