4
4
package echo
5
5
6
6
import (
7
- "github.com/stretchr/testify/assert"
8
7
"net"
9
8
"net/http"
10
9
"testing"
10
+
11
+ "github.com/stretchr/testify/assert"
11
12
)
12
13
13
14
func mustParseCIDR (s string ) * net.IPNet {
@@ -461,7 +462,7 @@ func TestExtractIPDirect(t *testing.T) {
461
462
}
462
463
463
464
func TestExtractIPFromRealIPHeader (t * testing.T ) {
464
- _ , ipForRemoteAddrExternalRange , _ := net .ParseCIDR ("203.0.113.199 /24" )
465
+ _ , ipForRemoteAddrExternalRange , _ := net .ParseCIDR ("203.0.113.0 /24" )
465
466
_ , ipv6ForRemoteAddrExternalRange , _ := net .ParseCIDR ("2001:db8::/64" )
466
467
467
468
var testCases = []struct {
@@ -489,36 +490,42 @@ func TestExtractIPFromRealIPHeader(t *testing.T) {
489
490
},
490
491
{
491
492
name : "request is from external IP has valid + UNTRUSTED external X-Real-Ip header, extract IP from remote addr" ,
493
+ givenTrustOptions : []TrustOption { // case for "trust direct-facing proxy"
494
+ TrustIPRange (ipForRemoteAddrExternalRange ), // we trust external IP range "203.0.113.199/24"
495
+ },
492
496
whenRequest : http.Request {
493
497
Header : http.Header {
494
- HeaderXRealIP : []string {"203.0.113.199" }, // <-- this is untrusted
498
+ HeaderXRealIP : []string {"203.0.113.199" },
495
499
},
496
- RemoteAddr : "203.0.113.1 :8080" ,
500
+ RemoteAddr : "8.8.8.8 :8080" , // <-- this is untrusted
497
501
},
498
- expectIP : "203.0.113.1 " ,
502
+ expectIP : "8.8.8.8 " ,
499
503
},
500
504
{
501
505
name : "request is from external IP has valid + UNTRUSTED external X-Real-Ip header, extract IP from remote addr" ,
506
+ givenTrustOptions : []TrustOption { // case for "trust direct-facing proxy"
507
+ TrustIPRange (ipv6ForRemoteAddrExternalRange ), // we trust external IP range "203.0.113.199/24"
508
+ },
502
509
whenRequest : http.Request {
503
510
Header : http.Header {
504
- HeaderXRealIP : []string {"[2001:db8::113:199 ]" }, // <-- this is untrusted
511
+ HeaderXRealIP : []string {"[bc01:1010::9090:1888 ]" },
505
512
},
506
- RemoteAddr : "[2001:db8::113: 1]:8080" ,
513
+ RemoteAddr : "[fe64:aa10:: 1]:8080" , // <-- this is untrusted
507
514
},
508
- expectIP : "2001:db8::113 :1" ,
515
+ expectIP : "fe64:aa10: :1" ,
509
516
},
510
517
{
511
518
name : "request is from external IP has valid + TRUSTED X-Real-Ip header, extract IP from X-Real-Ip header" ,
512
519
givenTrustOptions : []TrustOption { // case for "trust direct-facing proxy"
513
- TrustIPRange (ipForRemoteAddrExternalRange ), // we trust external IP range "203.0.113.199 /24"
520
+ TrustIPRange (ipForRemoteAddrExternalRange ), // we trust external IP range "203.0.113.0 /24"
514
521
},
515
522
whenRequest : http.Request {
516
523
Header : http.Header {
517
- HeaderXRealIP : []string {"203.0.113.199 " },
524
+ HeaderXRealIP : []string {"8.8.8.8 " },
518
525
},
519
526
RemoteAddr : "203.0.113.1:8080" ,
520
527
},
521
- expectIP : "203.0.113.199 " ,
528
+ expectIP : "8.8.8.8 " ,
522
529
},
523
530
{
524
531
name : "request is from external IP has valid + TRUSTED X-Real-Ip header, extract IP from X-Real-Ip header" ,
@@ -527,11 +534,11 @@ func TestExtractIPFromRealIPHeader(t *testing.T) {
527
534
},
528
535
whenRequest : http.Request {
529
536
Header : http.Header {
530
- HeaderXRealIP : []string {"[2001 :db8::113:199]" },
537
+ HeaderXRealIP : []string {"[fe64 :db8::113:199]" },
531
538
},
532
539
RemoteAddr : "[2001:db8::113:1]:8080" ,
533
540
},
534
- expectIP : "2001 :db8::113:199" ,
541
+ expectIP : "fe64 :db8::113:199" ,
535
542
},
536
543
{
537
544
name : "request is from external IP has XFF and valid + TRUSTED X-Real-Ip header, extract IP from X-Real-Ip header" ,
@@ -540,12 +547,12 @@ func TestExtractIPFromRealIPHeader(t *testing.T) {
540
547
},
541
548
whenRequest : http.Request {
542
549
Header : http.Header {
543
- HeaderXRealIP : []string {"203.0.113.199 " },
544
- HeaderXForwardedFor : []string {"203.0.113.198, 203.0.113.197 " }, // <-- should not affect anything
550
+ HeaderXRealIP : []string {"8.8.8.8 " },
551
+ HeaderXForwardedFor : []string {"1.1.1.1 ,8.8.8.8 " }, // <-- should not affect anything
545
552
},
546
553
RemoteAddr : "203.0.113.1:8080" ,
547
554
},
548
- expectIP : "203.0.113.199 " ,
555
+ expectIP : "8.8.8.8 " ,
549
556
},
550
557
{
551
558
name : "request is from external IP has XFF and valid + TRUSTED X-Real-Ip header, extract IP from X-Real-Ip header" ,
@@ -554,12 +561,12 @@ func TestExtractIPFromRealIPHeader(t *testing.T) {
554
561
},
555
562
whenRequest : http.Request {
556
563
Header : http.Header {
557
- HeaderXRealIP : []string {"[2001 :db8::113:199]" },
558
- HeaderXForwardedFor : []string {"[2001:db8 ::113:198], [2001 :db8::113:197 ]" }, // <-- should not affect anything
564
+ HeaderXRealIP : []string {"[fe64 :db8::113:199]" },
565
+ HeaderXForwardedFor : []string {"[feab:cde9 ::113:198], [fe64 :db8::113:199 ]" }, // <-- should not affect anything
559
566
},
560
567
RemoteAddr : "[2001:db8::113:1]:8080" ,
561
568
},
562
- expectIP : "2001 :db8::113:199" ,
569
+ expectIP : "fe64 :db8::113:199" ,
563
570
},
564
571
}
565
572
0 commit comments