MCPcopy Index your code
hub / github.com/labstack/echo / TestExtractIPFromXFFHeader

Function TestExtractIPFromXFFHeader

ip_test.go:603–716  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

601}
602
603func TestExtractIPFromXFFHeader(t *testing.T) {
604 _, ipForRemoteAddrExternalRange, _ := net.ParseCIDR("203.0.113.199/24")
605 _, ipv6ForRemoteAddrExternalRange, _ := net.ParseCIDR("2001:db8::/64")
606
607 var testCases = []struct {
608 whenRequest http.Request
609 name string
610 expectIP string
611 givenTrustOptions []TrustOption
612 }{
613 {
614 name: "request has no headers, extracts IP from request remote addr",
615 whenRequest: http.Request{
616 RemoteAddr: "203.0.113.1:8080",
617 },
618 expectIP: "203.0.113.1",
619 },
620 {
621 name: "request has INVALID external XFF header, extract IP from remote addr",
622 whenRequest: http.Request{
623 Header: http.Header{
624 HeaderXForwardedFor: []string{"xxx.yyy.zzz.ccc, 127.0.0.2"}, // <-- this is invalid
625 },
626 RemoteAddr: "127.0.0.1:8080",
627 },
628 expectIP: "127.0.0.1",
629 },
630 {
631 name: "request trusts all IPs in XFF header, extract IP from furthest in XFF chain",
632 whenRequest: http.Request{
633 Header: http.Header{
634 HeaderXForwardedFor: []string{"127.0.0.3, 127.0.0.2, 127.0.0.1"},
635 },
636 RemoteAddr: "127.0.0.1:8080",
637 },
638 expectIP: "127.0.0.3",
639 },
640 {
641 name: "request trusts all IPs in XFF header, extract IP from furthest in XFF chain",
642 whenRequest: http.Request{
643 Header: http.Header{
644 HeaderXForwardedFor: []string{"[fe80::3], [fe80::2], [fe80::1]"},
645 },
646 RemoteAddr: "[fe80::1]:8080",
647 },
648 expectIP: "fe80::3",
649 },
650 {
651 name: "request is from external IP has valid + UNTRUSTED external XFF header, extract IP from remote addr",
652 whenRequest: http.Request{
653 Header: http.Header{
654 HeaderXForwardedFor: []string{"203.0.113.199"}, // <-- this is untrusted
655 },
656 RemoteAddr: "203.0.113.1:8080",
657 },
658 expectIP: "203.0.113.1",
659 },
660 {

Callers

nothing calls this directly

Calls 2

TrustIPRangeFunction · 0.85
ExtractIPFromXFFHeaderFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…