Merge branch '2.8' into 3.4
* 2.8: [HttpKernel] fix forwarding trusted headers as server parameters
This commit is contained in:
commit
96e0833b93
@ -2134,7 +2134,7 @@ class Request
|
|||||||
if ($i) {
|
if ($i) {
|
||||||
$clientIps[$key] = $clientIp = substr($clientIp, 0, $i);
|
$clientIps[$key] = $clientIp = substr($clientIp, 0, $i);
|
||||||
}
|
}
|
||||||
} elseif ('[' == $clientIp[0]) {
|
} elseif (0 === strpos($clientIp, '[')) {
|
||||||
// Strip brackets and :port from IPv6 addresses.
|
// Strip brackets and :port from IPv6 addresses.
|
||||||
$i = strpos($clientIp, ']', 1);
|
$i = strpos($clientIp, ']', 1);
|
||||||
$clientIps[$key] = $clientIp = substr($clientIp, 1, $i - 1);
|
$clientIps[$key] = $clientIp = substr($clientIp, 1, $i - 1);
|
||||||
|
@ -914,8 +914,8 @@ class RequestTest extends TestCase
|
|||||||
|
|
||||||
// forwarded for with remote IPv4 addr not trusted
|
// forwarded for with remote IPv4 addr not trusted
|
||||||
array(array('127.0.0.1'), '127.0.0.1', '88.88.88.88', null),
|
array(array('127.0.0.1'), '127.0.0.1', '88.88.88.88', null),
|
||||||
// forwarded for with remote IPv4 addr trusted
|
// forwarded for with remote IPv4 addr trusted + comma
|
||||||
array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88', array('127.0.0.1')),
|
array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88,', array('127.0.0.1')),
|
||||||
// forwarded for with remote IPv4 and all FF addrs trusted
|
// forwarded for with remote IPv4 and all FF addrs trusted
|
||||||
array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88', array('127.0.0.1', '88.88.88.88')),
|
array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88', array('127.0.0.1', '88.88.88.88')),
|
||||||
// forwarded for with remote IPv4 range trusted
|
// forwarded for with remote IPv4 range trusted
|
||||||
|
@ -57,6 +57,7 @@ class SubRequestHandler
|
|||||||
foreach ($trustedHeaders as $key => $name) {
|
foreach ($trustedHeaders as $key => $name) {
|
||||||
if ($trustedHeaderSet & $key) {
|
if ($trustedHeaderSet & $key) {
|
||||||
$request->headers->remove($name);
|
$request->headers->remove($name);
|
||||||
|
$request->server->remove('HTTP_'.strtoupper(str_replace('-', '_', $name)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,13 +77,16 @@ class SubRequestHandler
|
|||||||
// set trusted values, reusing as much as possible the global trusted settings
|
// set trusted values, reusing as much as possible the global trusted settings
|
||||||
if (Request::HEADER_FORWARDED & $trustedHeaderSet) {
|
if (Request::HEADER_FORWARDED & $trustedHeaderSet) {
|
||||||
$trustedValues[0] .= sprintf(';host="%s";proto=%s', $request->getHttpHost(), $request->getScheme());
|
$trustedValues[0] .= sprintf(';host="%s";proto=%s', $request->getHttpHost(), $request->getScheme());
|
||||||
$request->headers->set($trustedHeaders[Request::HEADER_FORWARDED], implode(', ', $trustedValues));
|
$request->headers->set($name = $trustedHeaders[Request::HEADER_FORWARDED], $v = implode(', ', $trustedValues));
|
||||||
|
$request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
|
||||||
}
|
}
|
||||||
if (Request::HEADER_X_FORWARDED_FOR & $trustedHeaderSet) {
|
if (Request::HEADER_X_FORWARDED_FOR & $trustedHeaderSet) {
|
||||||
$request->headers->set($trustedHeaders[Request::HEADER_X_FORWARDED_FOR], implode(', ', $trustedIps));
|
$request->headers->set($name = $trustedHeaders[Request::HEADER_X_FORWARDED_FOR], $v = implode(', ', $trustedIps));
|
||||||
|
$request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
|
||||||
} elseif (!(Request::HEADER_FORWARDED & $trustedHeaderSet)) {
|
} elseif (!(Request::HEADER_FORWARDED & $trustedHeaderSet)) {
|
||||||
Request::setTrustedProxies($trustedProxies, $trustedHeaderSet | Request::HEADER_X_FORWARDED_FOR);
|
Request::setTrustedProxies($trustedProxies, $trustedHeaderSet | Request::HEADER_X_FORWARDED_FOR);
|
||||||
$request->headers->set($trustedHeaders[Request::HEADER_X_FORWARDED_FOR], implode(', ', $trustedIps));
|
$request->headers->set($name = $trustedHeaders[Request::HEADER_X_FORWARDED_FOR], $v = implode(', ', $trustedIps));
|
||||||
|
$request->server->set('HTTP_'.strtoupper(str_replace('-', '_', $name)), $v);
|
||||||
}
|
}
|
||||||
|
|
||||||
// fix the client IP address by setting it to 127.0.0.1,
|
// fix the client IP address by setting it to 127.0.0.1,
|
||||||
|
@ -47,6 +47,8 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
$subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en'));
|
$subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en'));
|
||||||
$subRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$subRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
$subRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
$subRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
||||||
|
$subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
|
$subRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||||
|
|
||||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest));
|
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest));
|
||||||
|
|
||||||
@ -101,6 +103,7 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
|
|
||||||
$expectedSubRequest = Request::create('/');
|
$expectedSubRequest = Request::create('/');
|
||||||
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
|
|
||||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||||
$this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent());
|
$this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent());
|
||||||
@ -193,8 +196,10 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
|
|
||||||
if (Request::HEADER_X_FORWARDED_FOR & Request::getTrustedHeaderSet()) {
|
if (Request::HEADER_X_FORWARDED_FOR & Request::getTrustedHeaderSet()) {
|
||||||
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
}
|
}
|
||||||
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||||
|
|
||||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||||
|
|
||||||
@ -217,6 +222,8 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
$expectedSubRequest = Request::create('/');
|
$expectedSubRequest = Request::create('/');
|
||||||
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
|
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||||
|
|
||||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||||
$request = Request::create('/', 'GET', array(), array(), array(), array('HTTP_IF_MODIFIED_SINCE' => 'Fri, 01 Jan 2016 00:00:00 GMT', 'HTTP_IF_NONE_MATCH' => '*'));
|
$request = Request::create('/', 'GET', array(), array(), array(), array('HTTP_IF_MODIFIED_SINCE' => 'Fri, 01 Jan 2016 00:00:00 GMT', 'HTTP_IF_NONE_MATCH' => '*'));
|
||||||
@ -232,6 +239,8 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
||||||
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
|
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||||
|
|
||||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||||
|
|
||||||
@ -249,6 +258,8 @@ class InlineFragmentRendererTest extends TestCase
|
|||||||
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
||||||
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
|
||||||
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
|
||||||
|
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||||
|
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||||
|
|
||||||
Request::setTrustedProxies(array('1.1.1.1/24'), -1);
|
Request::setTrustedProxies(array('1.1.1.1/24'), -1);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user