@@ -469,7 +469,7 @@ describe('test/csrf.test.js', () => {
469
469
}
470
470
} ) ;
471
471
472
- it ( 'should return 200 with correct referer when type is referer' , async ( ) => {
472
+ it ( 'should return 200 with correct referer or origin when type is referer' , async ( ) => {
473
473
mm ( app . config , 'env' , 'local' ) ;
474
474
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
475
475
mm ( app . config . security . csrf , 'refererWhiteList' , [ '.nodejs.org' ] ) ;
@@ -479,9 +479,15 @@ describe('test/csrf.test.js', () => {
479
479
. set ( 'accept' , 'text/html' )
480
480
. set ( 'referer' , 'https://nodejs.org/en/' )
481
481
. expect ( 200 ) ;
482
+
483
+ await app . httpRequest ( )
484
+ . post ( '/update' )
485
+ . set ( 'accept' , 'text/html' )
486
+ . set ( 'origin' , 'https://nodejs.org/en/' )
487
+ . expect ( 200 ) ;
482
488
} ) ;
483
489
484
- it ( 'should return 403 with correct referer when type is referer' , async ( ) => {
490
+ it ( 'should return 403 with correct referer or origin when type is referer' , async ( ) => {
485
491
mm ( app . config , 'env' , 'local' ) ;
486
492
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
487
493
mm ( app . config . security . csrf , 'refererWhiteList' , [ 'nodejs.org' ] ) ;
@@ -491,6 +497,12 @@ describe('test/csrf.test.js', () => {
491
497
. set ( 'accept' , 'text/html' )
492
498
. set ( 'referer' , 'https://wwwnodejs.org/en/' )
493
499
. expect ( 403 ) ;
500
+
501
+ await app . httpRequest ( )
502
+ . post ( '/update' )
503
+ . set ( 'accept' , 'text/html' )
504
+ . set ( 'origin' , 'https://wwwnodejs.org/en/' )
505
+ . expect ( 403 ) ;
494
506
} ) ;
495
507
496
508
it ( 'should return 200 with same root host when type is referer' , async ( ) => {
@@ -509,6 +521,19 @@ describe('test/csrf.test.js', () => {
509
521
. set ( 'referer' , 'https://nodejs.org/en/' )
510
522
. set ( 'host' , 'nodejs.org' )
511
523
. expect ( 200 ) ;
524
+
525
+ await app . httpRequest ( )
526
+ . post ( '/update' )
527
+ . set ( 'accept' , 'text/html' )
528
+ . set ( 'origin' , 'https://www.nodejs.org/en/' )
529
+ . set ( 'host' , 'nodejs.org' )
530
+ . expect ( 200 ) ;
531
+ await app . httpRequest ( )
532
+ . post ( '/update' )
533
+ . set ( 'accept' , 'text/html' )
534
+ . set ( 'origin' , 'https://nodejs.org/en/' )
535
+ . set ( 'host' , 'nodejs.org' )
536
+ . expect ( 200 ) ;
512
537
} ) ;
513
538
514
539
it ( 'should return 403 with invalid host when type is referer' , async ( ) => {
@@ -521,9 +546,16 @@ describe('test/csrf.test.js', () => {
521
546
. set ( 'referer' , 'https://wwwnodejs.org/en/' )
522
547
. set ( 'host' , 'nodejs.org' )
523
548
. expect ( 403 ) ;
549
+
550
+ await app . httpRequest ( )
551
+ . post ( '/update' )
552
+ . set ( 'accept' , 'text/html' )
553
+ . set ( 'origin' , 'https://wwwnodejs.org/en/' )
554
+ . set ( 'host' , 'nodejs.org' )
555
+ . expect ( 403 ) ;
524
556
} ) ;
525
557
526
- it ( 'should return 403 with evil referer when type is referer' , async ( ) => {
558
+ it ( 'should return 403 with evil referer or origin when type is referer' , async ( ) => {
527
559
mm ( app . config , 'env' , 'local' ) ;
528
560
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
529
561
mm ( app . config . security . csrf , 'refererWhiteList' , [ 'nodejs.org' ] ) ;
@@ -533,9 +565,14 @@ describe('test/csrf.test.js', () => {
533
565
. set ( 'accept' , 'text/html' )
534
566
. set ( 'referer' , 'https://nodejs.org!.evil.com/en/' )
535
567
. expect ( 403 ) ;
568
+ await app . httpRequest ( )
569
+ . post ( '/update' )
570
+ . set ( 'accept' , 'text/html' )
571
+ . set ( 'origin' , 'https://nodejs.org!.evil.com/en/' )
572
+ . expect ( 403 ) ;
536
573
} ) ;
537
574
538
- it ( 'should return 403 with illegal referer when type is referer' , async ( ) => {
575
+ it ( 'should return 403 with illegal referer or origin when type is referer' , async ( ) => {
539
576
mm ( app . config , 'env' , 'local' ) ;
540
577
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
541
578
mm ( app . config . security . csrf , 'refererWhiteList' , [ 'nodejs.org' ] ) ;
@@ -545,6 +582,11 @@ describe('test/csrf.test.js', () => {
545
582
. set ( 'accept' , 'text/html' )
546
583
. set ( 'referer' , '/en/' )
547
584
. expect ( 403 ) ;
585
+ await app . httpRequest ( )
586
+ . post ( '/update' )
587
+ . set ( 'accept' , 'text/html' )
588
+ . set ( 'origin' , '/en/' )
589
+ . expect ( 403 ) ;
548
590
} ) ;
549
591
550
592
it ( 'should return 200 with same domain request' , async ( ) => {
@@ -557,6 +599,13 @@ describe('test/csrf.test.js', () => {
557
599
. set ( 'accept' , 'text/html' )
558
600
. set ( 'referer' , `http://127.0.0.1:${ port } /` )
559
601
. expect ( 200 ) ;
602
+
603
+ const httpRequestObj2 = app . httpRequest ( ) . post ( '/update' ) ;
604
+ const port2 = httpRequestObj2 . app . address ( ) . port ;
605
+ await httpRequestObj2
606
+ . set ( 'accept' , 'text/html' )
607
+ . set ( 'origin' , `http://127.0.0.1:${ port2 } /` )
608
+ . expect ( 200 ) ;
560
609
} ) ;
561
610
562
611
it ( 'should return 403 with different domain request' , async ( ) => {
@@ -568,7 +617,14 @@ describe('test/csrf.test.js', () => {
568
617
. set ( 'accept' , 'text/html' )
569
618
. set ( 'referer' , 'https://nodejs.org/en/' )
570
619
. expect ( 403 )
571
- . expect ( / i n v a l i d c s r f r e f e r e r / ) ;
620
+ . expect ( / i n v a l i d c s r f r e f e r e r o r o r i g i n / ) ;
621
+
622
+ await app . httpRequest ( )
623
+ . post ( '/update' )
624
+ . set ( 'accept' , 'text/html' )
625
+ . set ( 'origin' , 'https://nodejs.org/en/' )
626
+ . expect ( 403 )
627
+ . expect ( / i n v a l i d c s r f r e f e r e r o r o r i g i n / ) ;
572
628
} ) ;
573
629
574
630
it ( 'should check both ctoken and referer when type is all' , async ( ) => {
@@ -581,13 +637,19 @@ describe('test/csrf.test.js', () => {
581
637
. set ( 'referer' , 'https://eggjs.org/en/' )
582
638
. expect ( 403 )
583
639
. expect ( / m i s s i n g c s r f t o k e n / ) ;
640
+ await app . httpRequest ( )
641
+ . post ( '/update' )
642
+ . set ( 'accept' , 'text/html' )
643
+ . set ( 'origin' , 'https://eggjs.org/en/' )
644
+ . expect ( 403 )
645
+ . expect ( / m i s s i n g c s r f t o k e n / ) ;
584
646
await app . httpRequest ( )
585
647
. post ( '/update' )
586
648
. send ( { _csrf : '1' } )
587
649
. set ( 'accept' , 'text/html' )
588
650
. set ( 'cookie' , 'csrfToken=1' )
589
651
. expect ( 403 )
590
- . expect ( / m i s s i n g c s r f r e f e r e r / ) ;
652
+ . expect ( / m i s s i n g c s r f r e f e r e r o r o r i g i n / ) ;
591
653
} ) ;
592
654
593
655
it ( 'should check one of ctoken and referer when type is any' , async ( ) => {
@@ -599,6 +661,11 @@ describe('test/csrf.test.js', () => {
599
661
. set ( 'accept' , 'text/html' )
600
662
. set ( 'referer' , 'https://eggjs.org/en/' )
601
663
. expect ( 200 ) ;
664
+ await app . httpRequest ( )
665
+ . post ( '/update' )
666
+ . set ( 'accept' , 'text/html' )
667
+ . set ( 'origin' , 'https://eggjs.org/en/' )
668
+ . expect ( 200 ) ;
602
669
await app . httpRequest ( )
603
670
. post ( '/update' )
604
671
. send ( { _csrf : '1' } )
@@ -614,7 +681,7 @@ describe('test/csrf.test.js', () => {
614
681
. expect ( / F o r b i d d e n E r r o r : b o t h c t o k e n a n d r e f e r e r c h e c k e r r o r : i n v a l i d c s r f t o k e n , m i s s i n g c s r f r e f e r e r / ) ;
615
682
} ) ;
616
683
617
- it ( 'should return 403 without referer when type is referer' , async ( ) => {
684
+ it ( 'should return 403 without referer or origin when type is referer' , async ( ) => {
618
685
mm ( app . config , 'env' , 'local' ) ;
619
686
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
620
687
mm ( app . config . security . csrf , 'refererWhiteList' , [ 'https://eggjs.org/' ] ) ;
@@ -624,10 +691,10 @@ describe('test/csrf.test.js', () => {
624
691
. set ( 'accept' , 'text/html' )
625
692
. expect ( 403 )
626
693
. expect ( / m i s s i n g c s r f r e f e r e r / ) ;
627
- app . expectLog ( 'missing csrf referer. See http' ) ;
694
+ app . expectLog ( 'missing csrf referer or origin . See http' ) ;
628
695
} ) ;
629
696
630
- it ( 'should return 403 with invalid referer when type is referer' , async ( ) => {
697
+ it ( 'should return 403 with invalid referer or origin when type is referer' , async ( ) => {
631
698
mm ( app . config , 'env' , 'local' ) ;
632
699
mm ( app . config . security . csrf , 'type' , 'referer' ) ;
633
700
mm ( app . config . security . csrf , 'refererWhiteList' , [ 'https://eggjs.org/' ] ) ;
@@ -637,8 +704,8 @@ describe('test/csrf.test.js', () => {
637
704
. set ( 'accept' , 'text/html' )
638
705
. set ( 'referer' , 'https://nodejs.org/en/' )
639
706
. expect ( 403 )
640
- . expect ( / i n v a l i d c s r f r e f e r e r / ) ;
641
- app . expectLog ( 'invalid csrf referer. See http' ) ;
707
+ . expect ( / i n v a l i d c s r f r e f e r e r o r o r i g i n / ) ;
708
+ app . expectLog ( 'invalid csrf referer or origin . See http' ) ;
642
709
} ) ;
643
710
644
711
it ( 'should throw with error type' , async ( ) => {
0 commit comments