• D
    Don’t ignore X-Forwarded-For IPs with ports attached · fbf1d82e
    Duncan Brown 提交于
    Rack decided to tolerate proxies which choose to attach ports to
    X-Forwarded-For IPs by stripping the port:
    https://github.com/rack/rack/pull/1251. Attaching a port is rare in the
    wild but some proxies (notably Microsoft Azure's App Service) do it.
    
    Without this patch, remote_ip will ignore X-Forwarded-For IPs with ports
    attached and the return value is less likely to be useful.
    
    Rails should do the same thing. The stripping logic is already available
    in Rack::Request::Helpers, so change the X-Forwarded-For retrieval
    method from ActionDispatch::Request#x_forwarded_for (which returns the
    raw header) to #forwarded_for, which returns a stripped array of IP
    addresses, or nil. There may be other benefits hiding in Rack's
    implementation.
    
    We can't call ips_from with an array (and legislating for that inside
    ips_from doesn't appeal), so refactor out the bit we need to apply in
    both cases (verifying the IP is acceptable to IPAddr and that it's not a
    range) to a separate method called #sanitize_ips which reduces an array of
    maybe-ips to an array of acceptable ones.
    fbf1d82e
request_test.rb 45.9 KB