Skip to content

Commit 518ec86

Browse files
committed
bug symfony#26973 [HttpKernel] Set first trusted proxy as REMOTE_ADDR in InlineFragmentRenderer. (kmadejski)
This PR was squashed before being merged into the 2.8 branch (closes symfony#26973). Discussion ---------- [HttpKernel] Set first trusted proxy as REMOTE_ADDR in InlineFragmentRenderer. | Q | A | ------------- | --- | Branch? | 2.7 and up | Bug fix? | improvement | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | --- | License | MIT | Doc PR | --- SubRequest used in `InlineFragmentRendered` explicitly sets `$server['REMOTE_ADDR']` to `127.0.0.1`. Therefore, it's required to configure `127.0.0.1` address in TRUSTED_PROXIES environment variable. Without that, `Request::isFromTrustedProxy()` will return false. The current behavior might be a little bit problematic, for instance, in case where images are rendered through subrequests. These might end-up with an incorrect schema in URL (`http` instead of `https`). Commits ------- 18f55fe [HttpKernel] Set first trusted proxy as REMOTE_ADDR in InlineFragmentRenderer.
2 parents dc0ac87 + 18f55fe commit 518ec86

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ protected function createSubRequest($uri, Request $request)
122122
// Do nothing
123123
}
124124

125-
$server['REMOTE_ADDR'] = '127.0.0.1';
125+
$trustedProxies = Request::getTrustedProxies();
126+
$server['REMOTE_ADDR'] = $trustedProxies ? reset($trustedProxies) : '127.0.0.1';
127+
126128
unset($server['HTTP_IF_MODIFIED_SINCE']);
127129
unset($server['HTTP_IF_NONE_MATCH']);
128130

src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public function testRenderWithObjectsAsAttributes()
5656
$subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en'));
5757
$subRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
5858
$subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
59+
$subRequest->server->set('REMOTE_ADDR', '1.1.1.1');
5960

6061
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest));
6162

@@ -84,7 +85,7 @@ public function testRenderWithTrustedHeaderDisabled()
8485
{
8586
Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, '');
8687

87-
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/')));
88+
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1'))));
8889
$this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent());
8990
}
9091

@@ -168,6 +169,7 @@ public function testESIHeaderIsKeptInSubrequest()
168169
{
169170
$expectedSubRequest = Request::create('/');
170171
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
172+
$expectedSubRequest->server->set('REMOTE_ADDR', '1.1.1.1');
171173

172174
if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) {
173175
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
@@ -193,7 +195,7 @@ public function testESIHeaderIsKeptInSubrequestWithTrustedHeaderDisabled()
193195

194196
public function testHeadersPossiblyResultingIn304AreNotAssignedToSubrequest()
195197
{
196-
$expectedSubRequest = Request::create('/');
198+
$expectedSubRequest = Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1'));
197199
if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) {
198200
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
199201
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');

0 commit comments

Comments
 (0)