Project

General

Profile

Feature #7586 » 0002-Configurable-trustedProxies-minor-fixes.patch

Bruce Toll, 09/24/2020 01:45 AM

View differences:

src/web/Configuration.C
bool Configuration::isTrustedProxy(const std::string &ipAddress) const {
READ_LOCK;
if (behindReverseProxy_) {
if (!behindReverseProxy_) {
return false;
}
AsioWrapper::error_code ec;
src/web/WebRequest.C
for (auto it = forwardedIps.rbegin();
it != forwardedIps.rend(); ++it) {
boost::trim(*it);
if (!it->empty() && !conf.isTrustedProxy(*it)) {
return *it;
if (!it->empty()) {
if (!conf.isTrustedProxy(*it)) {
return *it;
}
else {
/*
* When the left-most address in a forwardedHeader is contained
* within a trustedProxy subnet, it should be returned as the clientAddress
*/
remoteAddr = *it;
}
}
}
}
test/http/HttpClientServerTest.C
}
}
#endif // WT_THREADED
BOOST_AUTO_TEST_CASE( http_client_address_forward_for_includes_us_on_subnet )
{
Server server;
server.resource().clientAddressTest();
server.configuration().setBehindReverseProxy(true);
server.configuration().setTrustedProxies({
Configuration::Network::fromString("127.0.0.0/8"),
Configuration::Network::fromString("198.51.100.0/24"),
Configuration::Network::fromString("203.0.113.0/24")
});
if (server.start()) {
Client client;
std::vector<Http::Message::Header> headers {
{"X-Forwarded-For", "127.0.0.10, 203.0.113.1, 198.51.100.1"},
};
client.get("http://" + server.address() + "/test", headers);
client.waitDone();
BOOST_REQUIRE(!client.err());
BOOST_REQUIRE(client.message().status() == 200);
// Should get IP address from X-Forwarded-For
BOOST_REQUIRE(client.message().body() == "127.0.0.10");
}
}
#endif // WT_THREADED
(3-3/3)