@@ -40,7 +40,7 @@ func Test_CSRF(t *testing.T) {
40
40
ctx .Request .Reset ()
41
41
ctx .Response .Reset ()
42
42
ctx .Request .Header .SetMethod ("POST" )
43
- ctx .Request .Header .Set ("X-CSRF-Token" , "johndoe" )
43
+ ctx .Request .Header .Set (HeaderName , "johndoe" )
44
44
h (ctx )
45
45
utils .AssertEqual (t , 403 , ctx .Response .StatusCode ())
46
46
@@ -55,7 +55,7 @@ func Test_CSRF(t *testing.T) {
55
55
ctx .Request .Reset ()
56
56
ctx .Response .Reset ()
57
57
ctx .Request .Header .SetMethod ("POST" )
58
- ctx .Request .Header .Set ("X-CSRF-Token" , token )
58
+ ctx .Request .Header .Set (HeaderName , token )
59
59
h (ctx )
60
60
utils .AssertEqual (t , 200 , ctx .Response .StatusCode ())
61
61
}
@@ -305,7 +305,7 @@ func Test_CSRF_ErrorHandler_InvalidToken(t *testing.T) {
305
305
ctx .Request .Reset ()
306
306
ctx .Response .Reset ()
307
307
ctx .Request .Header .SetMethod ("POST" )
308
- ctx .Request .Header .Set ("X-CSRF-Token" , "johndoe" )
308
+ ctx .Request .Header .Set (HeaderName , "johndoe" )
309
309
h (ctx )
310
310
utils .AssertEqual (t , 419 , ctx .Response .StatusCode ())
311
311
utils .AssertEqual (t , "invalid CSRF token" , string (ctx .Response .Body ()))
@@ -340,3 +340,111 @@ func Test_CSRF_ErrorHandler_EmptyToken(t *testing.T) {
340
340
utils .AssertEqual (t , 419 , ctx .Response .StatusCode ())
341
341
utils .AssertEqual (t , "empty CSRF token" , string (ctx .Response .Body ()))
342
342
}
343
+
344
+ // TODO: use this test case and make the unsafe header value bug from https://github.com/gofiber/fiber/issues/2045 reproducible and permanently fixed/tested by this testcase
345
+ //func Test_CSRF_UnsafeHeaderValue(t *testing.T) {
346
+ // app := fiber.New()
347
+ //
348
+ // app.Use(New())
349
+ // app.Get("/", func(c *fiber.Ctx) error {
350
+ // return c.SendStatus(fiber.StatusOK)
351
+ // })
352
+ // app.Get("/test", func(c *fiber.Ctx) error {
353
+ // return c.SendStatus(fiber.StatusOK)
354
+ // })
355
+ // app.Post("/", func(c *fiber.Ctx) error {
356
+ // return c.SendStatus(fiber.StatusOK)
357
+ // })
358
+ //
359
+ // resp, err := app.Test(httptest.NewRequest(http.MethodGet, "/", nil))
360
+ // utils.AssertEqual(t, nil, err)
361
+ // utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
362
+ //
363
+ // var token string
364
+ // for _, c := range resp.Cookies() {
365
+ // if c.Name != ConfigDefault.CookieName {
366
+ // continue
367
+ // }
368
+ // token = c.Value
369
+ // break
370
+ // }
371
+ //
372
+ // fmt.Println("token", token)
373
+ //
374
+ // getReq := httptest.NewRequest(http.MethodGet, "/", nil)
375
+ // getReq.Header.Set(HeaderName, token)
376
+ // resp, err = app.Test(getReq)
377
+ //
378
+ // getReq = httptest.NewRequest(http.MethodGet, "/test", nil)
379
+ // getReq.Header.Set("X-Requested-With", "XMLHttpRequest")
380
+ // getReq.Header.Set(fiber.HeaderCacheControl, "no")
381
+ // getReq.Header.Set(HeaderName, token)
382
+ //
383
+ // resp, err = app.Test(getReq)
384
+ //
385
+ // getReq.Header.Set(fiber.HeaderAccept, "*/*")
386
+ // getReq.Header.Del(HeaderName)
387
+ // resp, err = app.Test(getReq)
388
+ //
389
+ // postReq := httptest.NewRequest(http.MethodPost, "/", nil)
390
+ // postReq.Header.Set("X-Requested-With", "XMLHttpRequest")
391
+ // postReq.Header.Set(HeaderName, token)
392
+ // resp, err = app.Test(postReq)
393
+ //}
394
+
395
+ // go test -v -run=^$ -bench=Benchmark_Middleware_CSRF_Check -benchmem -count=4
396
+ func Benchmark_Middleware_CSRF_Check (b * testing.B ) {
397
+ app := fiber .New ()
398
+
399
+ app .Use (New ())
400
+ app .Get ("/" , func (c * fiber.Ctx ) error {
401
+ return c .SendStatus (fiber .StatusTeapot )
402
+ })
403
+
404
+ fctx := & fasthttp.RequestCtx {}
405
+ h := app .Handler ()
406
+ ctx := & fasthttp.RequestCtx {}
407
+
408
+ // Generate CSRF token
409
+ ctx .Request .Header .SetMethod ("GET" )
410
+ h (ctx )
411
+ token := string (ctx .Response .Header .Peek (fiber .HeaderSetCookie ))
412
+ token = strings .Split (strings .Split (token , ";" )[0 ], "=" )[1 ]
413
+
414
+ ctx .Request .Header .SetMethod ("POST" )
415
+ ctx .Request .Header .Set (HeaderName , token )
416
+
417
+ b .ReportAllocs ()
418
+ b .ResetTimer ()
419
+
420
+ for n := 0 ; n < b .N ; n ++ {
421
+ h (fctx )
422
+ }
423
+
424
+ utils .AssertEqual (b , fiber .StatusTeapot , fctx .Response .Header .StatusCode ())
425
+ }
426
+
427
+ // go test -v -run=^$ -bench=Benchmark_Middleware_CSRF_GenerateToken -benchmem -count=4
428
+ func Benchmark_Middleware_CSRF_GenerateToken (b * testing.B ) {
429
+ app := fiber .New ()
430
+
431
+ app .Use (New ())
432
+ app .Get ("/" , func (c * fiber.Ctx ) error {
433
+ return c .SendStatus (fiber .StatusTeapot )
434
+ })
435
+
436
+ fctx := & fasthttp.RequestCtx {}
437
+ h := app .Handler ()
438
+ ctx := & fasthttp.RequestCtx {}
439
+
440
+ // Generate CSRF token
441
+ ctx .Request .Header .SetMethod ("GET" )
442
+ b .ReportAllocs ()
443
+ b .ResetTimer ()
444
+
445
+ for n := 0 ; n < b .N ; n ++ {
446
+ h (fctx )
447
+ }
448
+
449
+ utils .AssertEqual (b , fiber .StatusTeapot , fctx .Response .Header .StatusCode ())
450
+ }
0 commit comments