Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions middleware/csrf/csrf.go
Original file line number Diff line number Diff line change
Expand Up @@ -387,14 +387,14 @@ func refererMatchesHost(c fiber.Ctx, trustedOrigins []string, trustedSubOrigins
return nil
}

referer = refererURL.String()
refererOrigin := utilsstrings.ToLower(refererURL.Scheme) + "://" + utilsstrings.ToLower(refererURL.Host)
Comment thread
gaby marked this conversation as resolved.
Outdated

if slices.Contains(trustedOrigins, referer) {
if slices.Contains(trustedOrigins, refererOrigin) {
return nil
}

for _, trustedSubOrigin := range trustedSubOrigins {
if trustedSubOrigin.match(referer) {
if trustedSubOrigin.match(refererOrigin) {
return nil
}
}
Expand Down
16 changes: 16 additions & 0 deletions middleware/csrf/csrf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,22 @@ func Test_CSRF_TrustedOrigins(t *testing.T) {
ctx.Request.Header.SetCookie(ConfigDefault.CookieName, token)
h(ctx)
require.Equal(t, 403, ctx.Response.StatusCode())

// Test Trusted Referer with path — referer URL includes a path component
// which must not prevent matching against the trusted origin
ctx.Request.Reset()
ctx.Response.Reset()
ctx.Request.Header.SetMethod(fiber.MethodPost)
ctx.Request.Header.Set(fiber.HeaderXForwardedProto, "https")
ctx.Request.URI().SetScheme("https")
ctx.Request.URI().SetHost("example.com")
ctx.Request.Header.SetProtocol("https")
ctx.Request.Header.SetHost("example.com")
ctx.Request.Header.Set(fiber.HeaderReferer, "https://safe.example.com/some/path?q=1")
ctx.Request.Header.Set(HeaderName, token)
ctx.Request.Header.SetCookie(ConfigDefault.CookieName, token)
h(ctx)
require.Equal(t, 200, ctx.Response.StatusCode())
}

func Test_CSRF_TrustedOrigins_InvalidOrigins(t *testing.T) {
Expand Down
Loading