Modify default behavior of maxhops to truncate#10
Modify default behavior of maxhops to truncate#10sporkmonger wants to merge 1 commit intocaptncraig:masterfrom
Conversation
Since maxhops is currently undocumented, I made a small change to move existing error behavior to strict mode, in line with other strict mode errors. In non-strict mode, maxhops will truncate the list down to whatever the maxhops value is set to. This allows for handling of scenarios where the set of CIDR ranges is either unknown, too long to list, or too frequently changing. Instead you can set your CIDR range to 0.0.0.0/0 and, e.g. for a Caddy server behind a single load balancer, you can set maxhops to 1. Any IPs to the left of the 1 IP address allowed will simply be truncated. This allows you to trivially eliminate IPs internal to other networks which are provided by forward proxies, and consistently obtain the IP you're actually looking for in upstream code. While it's a breaking change, it's a breaking change to an undocumented feature and this seems like a better behavioral fit for a plugin named 'realip', and it doesn't prevent people from getting the original behavior if they so desire. Also documented the full behavior of maxhops and added a bunch more tests, including explicit tests of strict mode.
|
I'm not sure how I feel about this. It seems wrong to allow arbitrary length proxy chains. I understand that strict mode is a thing, but now I kinda wish we had reversed that. On the other hand, it still does not trust anything coming from an untrusted proxy, as long as the most recent N are trusted, correct? |
|
Yes, that's correct. |
|
I'd argue, BTW, the other direction on |
Since
maxhopsis currently undocumented, I made a small change to moveexisting error behavior to strict mode, in line with other strict mode
errors.
In non-strict mode,
maxhopswill truncate the list down to whatever themaxhopsvalue is set to. This allows for handling of scenarios where theset of CIDR ranges is either unknown, too long to list, or too
frequently changing. Instead you can set your CIDR range to 0.0.0.0/0
and, e.g. for a Caddy server behind a single load balancer, you can set
maxhopsto 1. Any IPs to the left of the 1 IP address allowed willsimply be truncated. This allows you to trivially eliminate IPs internal
to other networks which are provided by forward proxies, and
consistently obtain the IP you're actually looking for in upstream code.
While it's a breaking change, it's a breaking change to an undocumented
feature and this seems like a better behavioral fit for a plugin named
'realip', and it doesn't prevent people from getting the original
behavior if they so desire.
Also documented the full behavior of
maxhopsand added a bunch moretests, including explicit tests of strict mode.