Skip to content

Commit

Permalink
Merge pull request #14 from gobuffalo/no-content-type-constraint
Browse files Browse the repository at this point in the history
No content type constraint
  • Loading branch information
sio4 authored Jan 28, 2023
2 parents 712ef59 + 09d42cc commit 0f17953
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 259 deletions.
18 changes: 4 additions & 14 deletions csrf.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ var (

// Idempotent (safe) methods as defined by RFC7231 section 4.2.2.
safeMethods = []string{"GET", "HEAD", "OPTIONS", "TRACE"}
htmlTypes = []string{"html", "form", "plain", "*/*"}
)

var (
Expand Down Expand Up @@ -60,15 +59,6 @@ var New = func(next buffalo.Handler) buffalo.Handler {
return func(c buffalo.Context) error {
req := c.Request()

ct := req.Header.Get("Content-Type")
if len(ct) == 0 {
ct = req.Header.Get("Accept")
}
// ignore non-html requests
if ct != "" && !contains(htmlTypes, ct) {
return next(c)
}

var realToken []byte
var err error
rawRealToken := c.Session().Get(tokenKey)
Expand Down Expand Up @@ -100,11 +90,11 @@ var New = func(next buffalo.Handler) buffalo.Handler {
// otherwise fails to parse.
referer, err := url.Parse(req.Referer())
if err != nil || referer.String() == "" {
return ErrNoReferer
return c.Error(http.StatusForbidden, ErrNoReferer)
}

if !sameOrigin(req.URL, referer) {
return ErrBadReferer
return c.Error(http.StatusForbidden, ErrBadReferer)
}
}

Expand All @@ -113,12 +103,12 @@ var New = func(next buffalo.Handler) buffalo.Handler {

// Missing token
if requestToken == nil {
return ErrNoToken
return c.Error(http.StatusForbidden, ErrNoToken)
}

// Compare tokens
if !compareTokens(requestToken, realToken) {
return ErrBadToken
return c.Error(http.StatusForbidden, ErrBadToken)
}
}

Expand Down
10 changes: 6 additions & 4 deletions csrf_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package csrf_test

import (
"net/http"
"os"
"testing"

Expand Down Expand Up @@ -52,11 +53,12 @@ func Test_CSRFOnJSONRequest(t *testing.T) {

// Test missing token case
res := w.HTML("/csrf").Post("")
r.Equal(500, res.Code)
r.Equal(http.StatusForbidden, res.Code)
r.Contains(res.Body.String(), "CSRF token not found in request")

rs := w.JSON("/csrf").Post("")
r.Equal(420, rs.Code)
r.Equal(http.StatusForbidden, rs.Code)
r.Contains(res.Body.String(), "CSRF token not found in request")
}

func Test_CSRF_TestMode(t *testing.T) {
Expand All @@ -83,14 +85,14 @@ func Test_CSRFOnEditingAction(t *testing.T) {

// Test missing token case
res := w.HTML("/csrf").Post("")
r.Equal(500, res.Code)
r.Equal(http.StatusForbidden, res.Code)
r.Contains(res.Body.String(), "CSRF token not found in request")

// Test provided bad token through Header case
req := w.HTML("/csrf")
req.Headers["X-CSRF-Token"] = "test-token"
res = req.Post("")
r.Equal(500, res.Code)
r.Equal(http.StatusForbidden, res.Code)
r.Contains(res.Body.String(), "CSRF token not found in request")

// Test provided good token through Header case
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ module github.com/gobuffalo/mw-csrf
go 1.16

require (
github.com/gobuffalo/buffalo v0.18.9
github.com/gobuffalo/envy v1.10.1
github.com/gobuffalo/httptest v1.5.1
github.com/stretchr/testify v1.8.0
github.com/gobuffalo/buffalo v1.1.0
github.com/gobuffalo/envy v1.10.2
github.com/gobuffalo/httptest v1.5.2
github.com/stretchr/testify v1.8.1
)
Loading

0 comments on commit 0f17953

Please sign in to comment.