Skip to content

Commit fc1661d

Browse files
committed
fix(middleware): reject CSRF TokenLookup that produces no extractors
1 parent 05489dc commit fc1661d

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

middleware/csrf.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package middleware
55

66
import (
77
"crypto/subtle"
8+
"errors"
89
"net/http"
910
"slices"
1011
"strings"
@@ -160,6 +161,9 @@ func (config CSRFConfig) ToMiddleware() (echo.MiddlewareFunc, error) {
160161
if cErr != nil {
161162
return nil, cErr
162163
}
164+
if len(extractors) == 0 {
165+
return nil, errors.New("echo csrf middleware could not create extractors from TokenLookup string")
166+
}
163167

164168
return func(next echo.HandlerFunc) echo.HandlerFunc {
165169
return func(c *echo.Context) error {

middleware/csrf_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@ func TestCSRF_tokenExtractors(t *testing.T) {
159159
givenQueryTokens: map[string][]string{},
160160
expectToMiddlewareError: "extractor source for lookup could not be split into needed parts: q",
161161
},
162+
{
163+
name: "nok, TokenLookup with only unknown source yields no extractors",
164+
whenTokenLookup: "nope:nope",
165+
givenCSRFCookie: "token",
166+
givenMethod: http.MethodPut,
167+
givenQueryTokens: map[string][]string{},
168+
expectToMiddlewareError: "echo csrf middleware could not create extractors from TokenLookup string",
169+
},
162170
}
163171

164172
for _, tc := range testCases {

0 commit comments

Comments
 (0)